Deadlock(교착 상태)란?

- waiting 쓰레드가 다시는 state를 바꿀 수 없는 상황 (또다른 waiting 쓰레드가 요청 자원을 들고 있기 때문)
- 두 개 이상의 프로세스나 쓰레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태
자원
- 동일한 자원 type의 인스턴스를 쓰레드가 요청하면,
- 그중 아무거나 줘도 요청을 만족함.
- Request - Use - Release
데드락의 조건 (모두 다 만족해야 함)
- Mutual Exclusion (상호배제)
- 적어도 하나의 자원은 공유 불가능한 자원
- Hold and Wait (점유&대기)
- 쓰레드A가 적어도 하나의 자원을 점유
- 그리고 쓰레드 B가 점유한 자원을 대기
- No preemption (선점 불가)
- 자원은 선점 불가
- Circular Wait (원형 대기)
- 의존성 그래프 원형
자원 할당 그래프 (RAG, Resource-Allocation Graph)
- 데드락 발생 조건 파악 가능
- 어떤 프로세스가 어떤 자원을 할당 받아 사용 중인지 확인 가능
- 어떤 프로세스가 어떤 자원을 기다리고 있는지 확인 가능

- 쓰레드(프로세스) = 원
- 자원 = 사각형
- 자원 인스턴스 = 사각형 내부 점
- 사용할 수 있는 자원의 개수 = 자원 사각형 내에 점