php 重力特权//锁定//简单锁定系统以防止并发操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 重力特权//锁定//简单锁定系统以防止并发操作相关的知识,希望对你有一定的参考价值。
/**
* Gravity Perks // Lock // Simple Locking System to Prevent Concurrent Actions
* http://gravitywiz.com./
*/
class GP_Lock {
private $id;
public function __construct( $id = false ) {
if( ! $id ) {
$id = uniqid( 'gpl' );
}
$this->id = $id;
$dirs = wp_upload_dir();
$this->path = $dirs['basedir'] . '/gp-locks/' . $this->id;
$this->flush_expired_lock();
}
public function lock() {
$dirs = wp_upload_dir();
$basepath = $dirs['basedir'] . '/gp-locks';
if( ! file_exists( $basepath ) ) {
mkdir( $basepath );
}
$lock = false;
$timeout = 10; // seconds
$wait = 0.25; // seconds
for( $i = 0; $i < $timeout / $wait; $i++ ) {
$lock = @mkdir( $this->path, 0700 );
if( $lock ) {
break;
}
sleep( $wait );
}
return $lock;
}
public function unlock() {
return @rmdir( $this->path );
}
/**
* PHP may crash before the lock is released. Release the lock after PHP's max execution time has elapsed as a safeguard.
*/
public function flush_expired_lock() {
if( (int) filectime( $this->path ) + (int) ini_get( 'max_execution_time' ) <= time() ) {
$this->unlock();
}
}
}
以上是关于php 重力特权//锁定//简单锁定系统以防止并发操作的主要内容,如果未能解决你的问题,请参考以下文章
php利用文件进行排他型锁定,防止并发
锁定机制和数据并发管理(笔记)
防止代码死锁的锁定策略和技术
为啥我不能用布局重力锁定 DrawerLayout
PHP 利用文件锁处理高并发
PHP 利用文件锁处理高并发