我使用mysql get_lock来确保在同一行代码中运行的多个php脚本实例之间的互斥。我需要确保is_free_lock的两次同时执行不会产生0,在这种情况下,我将被脚本的两个实例锁定,然后执行该代码两次。请帮帮忙。
if($lock->isLockFree()) {
// lock
// release lock
} else {
// trigger already locked error
}发布于 2013-06-08 03:44:53
不要使用IS_FREE_LOCK(str)。您只需使用GET_LOCK(str,timeout)并检查它是否返回1(成功,获得锁定)或0(失败,获得锁定)。因此,您的代码应该如下所示:
// try to lock
if($lock->getLock()) {
// locked
// release lock
$lock->releaseLock();
} else {
// trigger already locked error
}getLock()应该在哪些地方使用GET_LOCK(str,timeout)
顺便说一下,如果你使用php,你可能想试试我的ninja-mutex库的锁定。
https://stackoverflow.com/questions/16962104
复制相似问题