ID가있는 객체가 DB에 있는지 검사하고 그렇지 않은 경우 항목을 작성하는 PHP 작업이 있습니다. 동일한 ID에 대한 요청이 동시에 발생할 수 있으므로 ID가 두 번 삽입되는 것을 방지하고 싶습니다. 나는 모든 객체 ID에 대한 개별 세마포어를 만드는거야 때문에 :PHP에서 마지막 sem_release 후 Semaphore 제거하기
$semaphore = sem_get($keyForID, 1);
sem_acquire($semaphore);
// 1.) check for id
// 2.) insert object if it doesn't exist
sem_release($semaphore);
내 질문은 : 나는 현재 특정 키에 대한 DB에/잠금 해제 액세스를 고정하려면 다음 코드를 사용하고
, 명시 적으로 sem_remove
을 사용하여 해당 세마포어를 제거해야합니까? 아니면 PHP가 sem_release
이후 자동으로 수행합니까?
세마포어를 명시 적으로 제거해야하는 경우 해당 세마포가 다른 스레드에 의해 현재 획득되어 있는지 확인하기위한 쉽고 안정적인 방법이 있습니까? 그래야 후자가 sem_release
에 충돌하지 않습니까? 공유 메모리를 사용하는 것은 마음에 들지만 스레드의 수를 읽거나 쓰려면 또 다른 세마포어가 필요합니다.