1.8 잠금 순서의 규칙
여러 뮤텍스를 사용할 때 교착 상태를 예방하려면 각 뮤텍스의 잠금 순서를 먼저 그래프로 그려 두어야 합니다. 그리고 잠금을 할 때는 잠금 순서 그래프를 보면서 거꾸로 잠근 것이 없는지 체크해야 합니다.
예를 들어 뮤텍스 A·B·C가 있다고 가정했을 때, 이들의 잠금 순서는 다음과 같습니다.
A → B → C // ➊
여러분 코드가 이와 동일한 순서(A → B → C)로 잠근다고 할 때, 이를 코드로 표현하면 다음과 같습니다.
lock(A) lock(B) lock(C) unlock(C) unlock(B) unlock(A)
➊의 잠금 순서를 잘 지켰으므로 이때는 교착 상태를 전혀 일으키지 않습니다.
다음 코드처럼 A → B 순서로 잠그는 것도 역시 안전합니다. ➊의 순서를 어기지 않았으니까요.
lock(A) lock(B) unlock(B) unlock(A)