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