더북(TheBook)

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)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.