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