데드락 ( Deadlock ) 이란?

  • 둘 이상의 쓰레드가 서로 점유하고 있는 자원에 대해서 독점적인 접근을 시도하여 서로 무한정 기다리는 상태를 말합니다.




데드락 ( Deadlock ) 발생 조건

 

상호 배제 ( Mutual exclusion )

  • 자원에 대한 배타적 접근만을 허용하는 것을 의미합니다.




점유와 대기 ( Hold and wait )

  • 특정 자원에 대한 접근 권한을 가진 상태에서 다른 자원에 대한 접근 권한을 기다리는 상태를 의미합니다.




비선점 ( No preemption )

  • 다른 쓰레드가 소유중인 자원에 대해서 선점할 수 없는 것을 의미합니다.




순환대기 ( Circular wait )

  • 각 쓰레드가 누군가 소유중인 자원에 대해서 접근을 시도합니다.




데드락 ( Deadlock ) 재현 방법

 

  • 위 그림과 같이 1, 2번 쓰레드가 서로가 소유하고 있는 자원에 접근을 시도할 경우 100% 데드락 ( Deadlock ) 이 발생됩니다.




데드락 ( Deadlock ) 회피 방법

 

  • 데드락 ( Deadlock )데드락 ( Deadlock ) 발생 조건 에서 하나라도 부합하지 않다면 발생되지 않습니다.




회피 방법 1

  • 중복 락을 제거하고 하나의 락으로 통일합니다.




회피 방법 2

  • 락을 사용하는 자원에 대해서 중복되지 않는 정수의 seed 값을 할당하여 중복 락을 시도하기 전에 정렬하여 락에 대한 순서를 지키도록 합니다.



+ Recent posts