如果 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
然后再次运行它 - 它将再次锁定