SyncMutex::unlock

(PECL sync >= 1.0.0)

SyncMutex::unlock解锁互斥锁

描述

public SyncMutex::unlock(bool $all = false): bool

减少 SyncMutex 对象的内部计数器。当内部计数器达到零时,对象上的实际锁将被释放。

参数

all

指定是否将内部计数器设置为零,从而释放锁。

返回值

成功时返回 true,失败时返回 false

示例

示例 #1 SyncMutex::unlock() 示例

<?php
$mutex
= new SyncMutex("UniqueName");

$mutex->lock();

/* ... */

$mutex->unlock();
?>

参见

添加注释

用户贡献的注释 1 个注释

4
npelov at croler dot net
4 年前
如果 php 进程意外死亡(在 linux 上),锁将保持存在,没有选项可以删除它。如果锁被其他进程持有,unlock() 将不起作用。SyncMutex 使用共享内存。在这种情况下,您可以删除 /dev/shm 中的共享内存对象。要列出对象

ls /dev/shm/Sync_Mutex*

请记住,即使在解锁后,对象仍会保留在那里。因此,如果您使用大量的随机互斥锁名称,那么这些对象的数量会增加,您可能需要在某个时候进行清理。

示例 sync.php
<?php

$s
= new SyncMutex("mymutex");

if(!
$s->lock()){
echo
"cannot lock\n";
exit;
}
echo
"locked\n";
sleep(10);
$s->unlock();
echo
"unlocked\n";
?>

然后运行

php -f sync.php

然后按 ctrl-c。如果您再次运行它,它将无法锁定。因此,您可以执行以下操作

rm -f /dev/shm/Sync_Mutex-*-mymutex

然后再次运行它 - 它将再次锁定
To Top