Deadlock은 멀티프로세스 환경에서 발생하는 문제로, 두 개 이상의 프로세스가 서로의 작업이 끝나기를 무한정 기다리는 상태. 이 상태에서는 어떤 프로세스도 자신의 실행을 계속 진행할 수 없게 된다. Deadlock이 발생하면, 해당 프로세스들은 자원을 점유하고 있으면서도 다음 단계로 진행할 수 없으므로, 시스템의 효율성이 크게 저하된다.
Deadlock은 여러 프로세스가 서로가 점유하고 있는 자원을 요구하며, 그 결과 모든 프로세스가 실행을 계속할 수 없는 상태에 빠지는 현상이다.
Deadlock이 발생하기 위해선 다음 네 가지 조건이 모두 충족되어야 한다:
상호 배제(Mutual Exclusion)
점유 대기(Hold and Wait)
비선점(No Preemption)
순환 대기(Circular Wait)
네 가지 조건 중 하나라도 충족되지 않으면 Deadlock은 발생하지 않는다. 예를 들어:
비선점 가능: 만약 시스템이 비선점을 허용한다면, 프로세스가 다른 자원을 기다리는 동안 현재 점유하고 있는 자원을 강제로 회수하여 다른 프로세스에 할당할 수 있다. 이는 순환 대기 상태를 깨트리고 Deadlock을 방지할 수 있다.
순환 대기가 없는 경우: 자원 할당 순서를 정해 순환 대기를 방지할 수 있다. 예를 들어, 모든 프로세스가 점유하려는 자원을 일정한 순서로만 요구하도록 할 수 있다. 이 경우, 순환 대기 조건을 만족시키지 않으므로 Deadlock이 발생하지 않는다.
결국 Deadlock을 예방하거나 해결하기 위해서는 이 네 가지 조건 중 최소한 하나를 만족시키지 않도록 하는 전략을 취해야 한다.