adopt_lock : 이미 뮤텍스가 현재 스레드에 의해 잠겨있다고 가정합니다. (=잠그지 않습니다) 

std::lock(a, b);
std::lock_guard<std::mutex> lk1(a, std::adopt_lock);
std::lock_guard<std::mutex> lk2(b, std::adopt_lock);

 

자 adopt_lock이 쓰였네요.
adopt_lock은 이미 뮤텍스가 잠겨있다고 가정한다고 했습니다.
실제로 lock_guard를 생성하기 전 std::lock으로 잠군 상태입니다.


mutex m1;
mutex m2;

 

lock(m1, m2);

lock_guard<mutex> g1(m1, adopt_lock);     //adopt_lock 이미 lock 되어 있으니 (위에서 lock() ) 끝날떄 풀어주기만 하라는 명령

 

lock_guard<mutex> g2(m2, adopt_lock);  

 

반응형

+ Recent posts