我在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
上崩溃?想到使用共享内存,但这需要另一个信号量来读/写线程数。