[멀티쓰레드 프로그래밍] 교착 상태(dead lock)
교착 상태
source: https://velog.io/@jess29/DeadLock
- 두 개 이상의 쓰레드가 서로를 기다리는 상황을 의미
- 쓰레드 1은 쓰레드 2가 하던 일이 끝날 때까지 기다리고,
- 쓰레드 2는 쓰레드 1이 하던 일이 끝날 때까지 기다리는 상황
- 즉, 양측 모두 상태방의 일 처리가 끝나기를 기다리지만, 끝이 날 방법이 없는 상황을 '교착 상태'라 한다.
서버의 교착 상태 시나리오
- CPU 사용량이 현저히 낮거나 0%이다. 동시접속사 수와 상관없다.
- 클라이언트가 서버를 이용할 수 없다. 예를 들어 로그인을 못하거나 뭔가 요청을 보냈는데 응답이 오지 않는다.
교착 상태 예방: 잠금 순서의 규칙
- 여러 뮤텍스를 사용할 떄 교착 상태를 예방하려면 각 뮤텍스의 잠금 순서를 먼저 그래프로 그려 두어야 한다.
- 그리고 잠금 순서 그래프를 보면서 거꾸로 잠근 것이 없는 지 체크해야 한다.