교착 상태가 발생할 조건에는 네 가지가 있다. 바로 상호 배제, 점유와 대기, 비선점, 원형 대기이다. 즉, 이 조건 중 하나라도 만족하지 않는다면 교착 상태가 발생하지 않지만, 아래 조건이 모두 만족될 때 교착 상태가 발생하지 않지만, 아래 조건이 모두 만족될 때 교착 상태가 발생할 가능성이 생긴다고 보면 된다.
교착상태의 대표적인 예시로 '식사하는 철학자 문제'가 있다. 참고하면 교착상태를 이해히는데 도움이 된다.
식사하는 철학자 문제 - 나무위키
우선 교착 상태가 발생한 근본적인 원인은 해당 자원을 한 번에 하나의 프로세스만 이용 가능했기 때문이다. 한 프로세스도 마찬가지로 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없을 때, 즉 상호 배제 상황에서 교착 상태가 발생할 수 있다.
어떠한 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다린다면 교착 상태가 발생할 수 있다. 이렇게 '자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태를 점유와 대기라고 한다.
교착 상태가 발생하게 된 또 하나의 근본적인 문제는 프로세스가 자원을 비선점하고 있었기 때문이다. 비선점 자원은 그 자원을 이용하는 프로세스의 작업이 끝나야만 비로소 이용할 수 있다. 즉, 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못했기 때문에 교착 상태가 발생했다고 볼 수 있다.
교착 상태가 발생한 마지막 이유는 프로세스들과 프로세스가 요청 및 할당받은 자원이 원의 형태를 이루었기 때문이다. 다시 말해 자원 할당 그래프가 원의 형태로 그려지면 교착 상태가 발생할 수 있다. 이렇게 프로세스들이 원의 형태로 자원을 대기하는 것을 원형 대기라고 한다.
프로세스가 자원 얻지 못해 다음 처리를 하지 못하는 상태를 말한다.
시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생하는 문제다.
교착 상태의 4가지 조건은 아래와 같다.
이 4가지 조건 중 하나라도 만족하지 않으면 교착상태는 발생하지 않는다.
순환대기는 점유 대기와 비선점을 모두 만족해야만 성립한다. 따라서 4가지가 서로 독립적이진 않다.