운영체제에서 Deadlock(교착 상태) 은 둘 이상의 프로세스가 서로 자원을 점유한 채, 상대방의 자원을 기다리며 무한히 대기하는 상태를 말한다.
이러한 상태가 발생하면, 해당 프로세스들은 더 이상 진행되지 못하고 정지하게 된다. 특히 멀티프로세스 환경에서 자원 공유가 많은 시스템일수록 주의해야 할 중요한 개념이다.

Deadlock이 발생하려면 다음의 네 가지 조건이 동시에 성립되어야 한다:
| 조건 | 설명 |
|---|---|
| 상호 배제(Mutual Exclusion) | 자원은 한 번에 한 프로세스만 사용할 수 있다 |
| 점유와 대기(Hold and Wait) | 자원을 가진 채, 다른 자원을 기다린다 |
| 비선점(No Preemption) | 할당된 자원은 강제로 빼앗을 수 없다 |
| 환형 대기(Circular Wait) | 서로가 상대방의 자원을 기다리는 원형 구조가 존재 |
이 네 가지 중 하나라도 깨지면 Deadlock은 발생하지 않는다.
다음은 두 개의 프로세스가 각각 프린터와 파일 자원을 점유한 채, 서로의 자원을 기다리는 상황이다:
P1: 프린터 획득 → 파일 요청 (대기)
P2: 파일 획득 → 프린터 요청 (대기)
→ 두 프로세스 모두 대기 상태로 진입하며, 영원히 빠져나오지 못한다.
4가지 발생 조건 중 하나 이상을 제거하여 deadlock 자체를 미리 방지하는 방법.
예시:
자원 요청 시 시스템이 위험 상태로 진입하는 것을 막는다
Deadlock 발생을 허용하고, 정기적으로 탐지하여 복구 작업 수행
복구 방법:
자원 할당 상태를 그래프로 표현한 후, 사이클이 존재하면 Deadlock 발생 가능성 존재
P1 → R1 → P2 → R2 → P1 (사이클 발생 → 데드락)
| 상황 | 설명 |
|---|---|
| 데이터베이스 트랜잭션 | 두 트랜잭션이 서로의 lock을 기다림 |
| 파일 시스템 | 하나의 파일을 점유한 채, 다른 파일 lock 요청 |
| 멀티 스레드 서버 | 각 스레드가 락을 여러 개 사용하며 충돌 발생 |