0

我正在使用 mysql get_lock 来确保我为同一行代码运行的多个 php 脚本实例之间的互斥。我需要确保 is_free_lock 的两个同时执行不会产生 0,在这种情况下,我将最终被脚本的两个实例锁定,然后执行该代码两次。请帮忙。

if($lock->isLockFree()) {
    // lock

    // release lock
} else {
    // trigger already locked error
}
4

1 回答 1

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库进行锁定。

于 2013-06-07T19:44:52.700 回答