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);
반응형
'운영체제 & 병렬처리 > Multithread' 카테고리의 다른 글
Sleep 함수의 이해 (0) | 2022.09.09 |
---|---|
Spinlock, 구현해 보기 Lock 구현 (0) | 2022.09.08 |
데드락(2) 해결 방안1 (0) | 2022.09.06 |
데드락 (1) 원인과 현상 (0) | 2022.09.06 |
[5] #include <mutex> lock 처리로 동기화 (0) | 2022.09.06 |