PHP Conference Japan 2024

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 則註釋

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