2013-06-06 2 views
0

동일한 코드 라인에서 실행중인 PHP 스크립트의 여러 인스턴스간에 상호 배제를 보장하기 위해 mysql get_lock을 사용하고 있습니다. is_free_lock을 두 번 동시에 실행하면 0이 발생하지 않도록해야합니다.이 경우 스크립트의 두 인스턴스에서 모두 잠금을 종료 한 다음 해당 코드를 두 번 실행합니다. 도와주세요.is_free_lock을 항상 보장하는 MySQL

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

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

답변

0

IS_FREE_LOCK(str)을 사용하지 마십시오. GET_LOCK(str,timeout)을 사용하고 1 (성공, 잠금 획득) 또는 0 (실패, 잠금 획득 완료)을 리턴하는지 확인해야합니다. 그래서 코드는 다음과 같이한다 : 당신은 당신이 잠금 내 ninja-mutex 라이브러리를 시도 할 수 있습니다 PHP를 사용하는 경우

// try to lock 
if($lock->getLock()) { 
    // locked 

    // release lock 
    $lock->releaseLock(); 
} else { 
    // trigger already locked error 
} 

어디 getLock() BTW GET_LOCK(str,timeout)

를 사용해야합니다.