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 利用文件锁处理高并发