IDを持つオブジェクトがDBにあるかどうかをチェックし、ない場合はそのエントリを作成するPHPの操作があります。同じIDのリクエストが同時に発生する可能性があるため、IDが2回挿入されないようにします。
私は現在、次のコードを使用して、その特定のキーのDBへのアクセスをロック/ロック解除しています。
$semaphore = sem_get($keyForID, 1);
sem_acquire($semaphore);
// 1.) check for id
// 2.) insert object if it doesn't exist
sem_release($semaphore);
私の質問は次のとおりです。オブジェクトIDごとに個別のセマフォを作成しているので、これらのセマフォを明示的に削除するsem_remove
必要がありますか、それともPHPは後で自動的に削除しsem_release
ますか?
セマフォを明示的に削除する必要がある場合、そのセマフォが現在別のスレッドによって取得されているかどうかを確認して、後者がクラッシュしないようにする簡単で信頼性の高い方法はありsem_release
ますか?共有メモリの使用が思い浮かびますが、スレッド数の読み取り/書き込みにはさらに別のセマフォが必要になります。