SyncMutex是PHP中跨平台、本地化可计数的互斥对象实现。
互斥体是一种互斥对象,它将对共享资源(如文件)的访问限制为单个实例。可计数互斥体一次获取互斥体,并在内部跟踪互斥体被锁定的次数。互斥体在超出范围后或被解锁的次数与被锁定的次数相同后立即被解锁。
使用PHP互斥锁来实现并发安全,SyncMutex类的原型如下:
class SyncMutex {
/* 方法 */
public __construct(string $name = ?)
public lock(int $wait = -1): bool
public unlock(bool $all = false): bool
}
在PHP中使用SyncMutex类需要安装PECL的sync扩展,下面以宝塔为例安装sync扩展
首先需要从PECL官网根据你的PHP版本下载sync扩展,然后编译安装扩展
wget https://pecl.php.net/get/sync-1.1.3.tgz
tar -zxvf sync-1.1.3.tgz
cd sync-1.1.3/
# 使用phpize命令用于准备php扩展库的编译环境
/www/server/php/80/bin/phpize
# 指定php配置目录
./configure --with-php-config=/www/server/php/80/bin/php-config
make && make install
编译安装完成后,sync扩展会生成在下面的目录
/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/
然后在相应的PHP配置文件中启用此扩展
extension=sync.so
使用示例
$lock = new \SyncMutex('lock');
$lock->lock();
// 临界区代码(受保护的代码)
echo '123456';
$lock->unlock();