[멀티쓰레드 프로그래밍] 교착 상태(dead lock)

Jin Hur·2022년 6월 29일
0

교착 상태

source: https://velog.io/@jess29/DeadLock

  • 두 개 이상의 쓰레드가 서로를 기다리는 상황을 의미
  • 쓰레드 1은 쓰레드 2가 하던 일이 끝날 때까지 기다리고,
  • 쓰레드 2는 쓰레드 1이 하던 일이 끝날 때까지 기다리는 상황
  • 즉, 양측 모두 상태방의 일 처리가 끝나기를 기다리지만, 끝이 날 방법이 없는 상황을 '교착 상태'라 한다.

서버의 교착 상태 시나리오

  • CPU 사용량이 현저히 낮거나 0%이다. 동시접속사 수와 상관없다.
  • 클라이언트가 서버를 이용할 수 없다. 예를 들어 로그인을 못하거나 뭔가 요청을 보냈는데 응답이 오지 않는다.

교착 상태 예방: 잠금 순서의 규칙

  • 여러 뮤텍스를 사용할 떄 교착 상태를 예방하려면 각 뮤텍스의 잠금 순서를 먼저 그래프로 그려 두어야 한다.
  • 그리고 잠금 순서 그래프를 보면서 거꾸로 잠근 것이 없는 지 체크해야 한다.

0개의 댓글