데드락 해결 방법
- 교착 상태 방지 (Deadlock Prevention)
- 하나 이상의 조건을 유지할 수 없도록 함으로써 교착 상태가 발생하지 않습니다.
- 상호배제 (Mutual Exclusion)
- 공유 불가능한 리소스에 대해 보유해야 합니다.
- 재사용 가능한 리소스에 대한 상호 제외를 제거할 수 없으므로 이 옵션은 선택 사항이 아닙니다.
- 점유대기 (Hold and Wait)
- 스레드가 리소스를 요청할 때마다 다른 리소스를 보유하지 않도록 보장해야 합니다.
- 실행을 시작하기 전에 스레드가 모든 리소스를 요청하고 할당해야 합니다.
- 스레드에 할당된 리소스가 없는 경우에만 스레드가 리소스를 요청하도록 허용
- 단점 : 자원 활용률 저하 및 기아(Starvation) 발생 가능성
- 스레드가 리소스를 요청할 때마다 다른 리소스를 보유하지 않도록 보장해야 합니다.
- 비 선점 (No Preemption)
- 일부 리소스를 보유하고 있는 스레드가 즉시 할당할 수 없는 다른 리소스를 요청하면 해당 스레드가 현재 보유하고 있는 모든 리소스가 해제됩니다.
- 즉, 리소스를 강제로 뺴앗을 수 있습니다.
- 스레드가 대기하는 동안 리소스가 손실될 수 있습니다.
- 스레드가 새 리소스가 할당되고 사전 설정된 리소스를 복구하는 경우에만 다시 시작됩니다.
- 단점 : 뮤텍스락, 세마포어 등의 자원에 일반적으로 적용할 수 없습니다.
- 일부 리소스를 보유하고 있는 스레드가 즉시 할당할 수 없는 다른 리소스를 요청하면 해당 스레드가 현재 보유하고 있는 모든 리소스가 해제됩니다.
- 순환대기 (Circular Wait)
- 모든 리소스 유형의 총 순서 부여, 각 스레드가 열거 순서에 따라 리소스를 요청하도록 요구합니다.
- 스레드는 리소스 번호의 증가된 순서로만 리소스를 요청할 수 있습니다.
- 스레드가 이러한 규칙을 위반하면 종료됩니다.
- 모든 리소스 유형의 총 순서 부여, 각 스레드가 열거 순서에 따라 리소스를 요청하도록 요구합니다.
'이론' 카테고리의 다른 글
| 컴파일러와 인터프리터 차이 (0) | 2024.03.24 |
|---|---|
| 컴파일링의 각 과정과 결과물 (0) | 2024.03.23 |
| 데드락(deadlock) 발생조건 4가지 (0) | 2024.03.19 |
| Animation Tweening (0) | 2024.03.18 |
| Animation Blending (0) | 2024.03.17 |