我在PHP中有一個操作,用於檢查具有ID的對象是否在DB中,如果不是,則創建一個條目。對同一個ID的請求可能會同時發生,所以我想阻止該ID被插入兩次。在PHP中刪除最後一個sem_release後的信號量
我目前使用下面的代碼來鎖定/解鎖訪問數據庫的特定關鍵:由於我創造的每個對象ID的個人旗語:
$semaphore = sem_get($keyForID, 1);
sem_acquire($semaphore);
// 1.) check for id
// 2.) insert object if it doesn't exist
sem_release($semaphore);
我的問題是,我是否明確地必須使用sem_remove
刪除這些信號量還是PHP在sem_release
之後自動執行這些信號量?
如果我必須明確地刪除信號量,有沒有一種簡單可靠的方法來檢查該信號是否被另一個線程獲取,以便後者不會在sem_release
上崩潰?想到使用共享內存,但這需要另一個信號量來讀/寫線程數。