데드락(Deadlock)은 멀티스레드 또는 멀티프로세스 환경에서 발생할 수 있는 상태의 하나입니다. 데드락은 두 개 이상의 프로세스나 스레드가 서로가 가지고 있는 자원을 기다리면서 상호배제(Mutual Exclusion), 점유와 대기(Hold and Wait), 비선점(No Preemption), 순환 대기(Circular Wait)의 네 가지 조건이 동시에 충족될 때 발생합니다.
상호배제(Mutual Exclusion): 자원은 한 번에 하나의 프로세스 또는 스레드만 사용할 수 있습니다. 다른 프로세스나 스레드는 자원의 사용이 완료될 때까지 기다려야 합니다.
점유와 대기(Hold and Wait): 이미 어떤 자원을 점유한 상태에서 다른 자원을 기다리는 경우, 해당 자원을 가진 프로세스나 스레드가 다른 자원을 사용할 수 있을 때까지 대기합니다.
비선점(No Preemption): 한 프로세스나 스레드가 어떤 자원을 사용 중인 경우, 이 자원을 다른 프로세스나 스레드가 강제로 빼앗을 수 없습니다.
순환 대기(Circular Wait): 여러 프로세스나 스레드가 서로가 점유한 자원을 기다리며, 이때 순환적으로 자원을 대기하는 상황이 발생합니다.
이렇게 네 가지 조건이 모두 충족되면 데드락이 발생하게 되며, 이 상태에서는 각 프로세스나 스레드가 무한정으로 대기하게 되어 시스템이 더 이상 진행할 수 없는 상태에 빠지게 됩니다.