我正在使用mysql get_lock来确保我为同一行代码运行的多个php脚本实例之间的互斥。我需要确保两个同时执行的is_free_lock不会产生0,在这种情况下,我将最终锁定脚本的两个实例,然后执行该代码两次。请帮忙。
if($lock->isLockFree()) {
// lock
// release lock
} else {
// trigger already locked error
}
答案 0 :(得分:0)
请勿使用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库进行锁定。