데드락 ( Deadlock ) 이란?
- 둘 이상의 쓰레드가 서로 점유하고 있는 자원에 대해서 독점적인 접근을 시도하여 서로 무한정 기다리는 상태를 말합니다.
데드락 ( Deadlock ) 발생 조건
상호 배제 ( Mutual exclusion )
- 자원에 대한 배타적 접근만을 허용하는 것을 의미합니다.
점유와 대기 ( Hold and wait )
- 특정 자원에 대한 접근 권한을 가진 상태에서 다른 자원에 대한 접근 권한을 기다리는 상태를 의미합니다.
비선점 ( No preemption )
- 다른 쓰레드가 소유중인 자원에 대해서 선점할 수 없는 것을 의미합니다.
순환대기 ( Circular wait )
- 각 쓰레드가 누군가 소유중인 자원에 대해서 접근을 시도합니다.
데드락 ( Deadlock ) 재현 방법
- 위 그림과 같이 1, 2번 쓰레드가 서로가 소유하고 있는 자원에 접근을 시도할 경우 100% 데드락 ( Deadlock ) 이 발생됩니다.
데드락 ( Deadlock ) 회피 방법
- 데드락 ( Deadlock ) 은 데드락 ( Deadlock ) 발생 조건 에서 하나라도 부합하지 않다면 발생되지 않습니다.
회피 방법 1
- 중복 락을 제거하고 하나의 락으로 통일합니다.
회피 방법 2
- 락을 사용하는 자원에 대해서 중복되지 않는 정수의 seed 값을 할당하여 중복 락을 시도하기 전에 정렬하여 락에 대한 순서를 지키도록 합니다.
'멀티 쓰레드' 카테고리의 다른 글
싱글 쓰레드와 멀티 쓰레드의 장.단점 (0) | 2022.09.30 |
---|---|
Interlocked 계열 함수에 대한 설명과 사용 시 주의 사항 (0) | 2022.09.22 |
Windows의 유저 모드 동기화 객체 & 커널 모드 동기화 객체 (0) | 2022.09.21 |
스핀 락 ( Spin Lock ) 이란? (0) | 2022.09.19 |