사실 제가 아는 데드록은 발로란트 요원 데드록밖에 모릅니다. 그러나 컴퓨터 시스템 개념중에 데드록이라는 개념이 있어 이번 시간에는 해당 개념에 대해 알아보는 시간을 가져보겠습니다.

둘 이상의 스레드가 서로 자원을 점유한 채, 상대방이 가진 자원을 기다리며 무한히 멈춰 있는 상태를 말합니다.
→ 서로 양보하지 않고 기다리기만 해서 프로그램이 멈춥니다.

→ 이렇게 되면 서로가 서로가 가진 Lock을 기다리며 영원히 기다리는 상태입니다.
Deadlock이 발생하려면 다음 4가지 조건을 모두 동시에 만족해야합니다.
→ 그러므로 위 조건 하나의 조건이라도 깨뜨리면 Deadlock을 방지할 수 있습니다.
여러 개의 Lock을 중첩해서 획득(nested lock acquire) 하는 경우 Deadlock 위험이 있습니다.
lock_acquire(&lock_a);
lock_acquire(&lock_b); // A 스레드가 이렇게 하고 있고
// 동시에
lock_acquire(&lock_b);
lock_acquire(&lock_a); // B 스레드가 이렇게 하고 있다면 Deadlock 가능성있음
→ 특히나 Priority donation 구현 시 nested donation 이 잘못 구현되면 Deadlock이 생길 수 있습니다.
| 항목 | 설명 |
|---|---|
| 정의 | 자원을 놓지 않고 서로 기다리면서 영원히 멈추는 상태 |
| 발생 조건 | 상호배제, 점유 대기, 비선점, 순환 대기 모두 만족 |
| Pintos 위험 지점 | nested lock_acquire(), priority donation 트리 |
| 방지 방법 | 고정된 락 순서 사용, timeout, 자원 선할당, 탐지 등 |
| 실제 전략 | 대부분은 순환 대기 방지 + 코드 설계로 예방 |