如果 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
然後再次執行它 - 它將會再次鎖定。