PHP使用SyncMutex互斥锁实现并发控制

92 阅读1分钟

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();