2013-04-30 2 views
2

트랜잭션을 열고 대기열에 작업을 추가 한 다음 트랜잭션을 닫는 클래스가 있습니다. open-> close 생애에 걸쳐 재귀 뮤텍스를 사용하고 싶습니다. 따라서 언제든지 하나의 스레드 만 트랜잭션을 열 수 있습니다. 다른 모든 스레드는 현재 트랜잭션이 끝날 때까지 차단됩니다.여러 메서드에 걸쳐있는 부스트를 사용하여 재귀 잠금을 구현하는 방법은 무엇입니까?

class MyObject 
{ 
    void beginTransaction() 
    { 
    // acquire mutex 
    } 

    void endTransaction() 
    { 
    // release mutex 
    } 

    boost::recursive_mutex m_mutex; 
} 

내가 어려움 잠금이 하나의 방법의 범위보다 더 오래 존재하는 것처럼 나는,이 경우에는 recursive_mutex을 사용하는 방법을 결정하는 데. 아무도 여기에 잠금을 적용 할 수있는 방법을 제안 할 수 있습니까?

답변

1

부스트 (표준 라이브러리) 자신의 생성자에서 뮤텍스를 잠그고 자신의 소멸자에서 그들을 잠금을 해제 잠금 및 잠금 해제 할 수 있습니다 뮤텍스, 및 잠금을 제공합니다. 잠금은 실제로 범위를 벗어날 때 잠금을 해제하는 데 사용되는 경량 래퍼입니다.

귀하의 경우에는 잠금 장치에 랩핑하지 않고 직접 뮤텍스를 사용하십시오.

beginTransactionm_mutex.lock()을 호출하여 뮤텍스를 잠그고 m_mutex.unlock()endTransaction에 입력하여 뮤텍스를 잠금 해제 할 수 있습니다. 다른 스레드가 호출간에 m_mutex.lock()을 호출하려고하면 소유 스레드에 의해 뮤텍스가 잠금 해제 될 때까지 차단됩니다.

관련 문제