C++ · THREAD

데드락 발생과 락 순서 회피

두 스레드가 서로 다른 mutex를 잡은 채 상대 mutex를 기다리면 대기 순환이 생겨 진행이 멈춥니다.

데드락 발생과 락 순서 회피 구조

deadlock
Thread Am1 보유, m2 대기
Thread Bm2 보유, m1 대기
cycle wait서로 해제만 기다림
std::lock동시 잠금 시도로 순환 회피
Thread AThread Bcycle waitstd::lock

데드락 발생과 락 순서 회피 기준

점검
순서 고정여러 mutex는 모든 코드에서 같은 순서로 잠급니다.
scoped_lockC++17에서는 여러 mutex를 RAII로 함께 관리할 수 있습니다.
임계 구역락을 잡은 채 오래 걸리는 작업을 하지 않습니다.
진단대기 그래프에서 원형 의존성이 보이면 데드락 후보입니다.