MySQL确保is_free_lock始终是独占的

时间:2013-06-06 12:29:17

标签: php mysql mysqli mutex mutual-exclusion

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

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

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

1 个答案:

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