

1971년에 E. G. 코프만 교수는 교착상태가 일어나려면 다음과 같은 네 가지 필요 조건을 충족시켜야 함을 보였다. 이 네가지 조건중 하나라도 충족되지 않으면 교착상태가 발생하지 않는다.
아래의 4가지 조건이 모두 만족하는 상태를 교착 상태로 정의한다.
| 상호배제(Mutual Exclusion) | 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다. |
|---|---|
| 점유대기(Hold and Wait) | 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다. |
| 비선점(Non-preemption) | 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다. |
| 환형 대기(Circular Wait) | 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다. |
교착상태 예방 기법은 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법으로 교착상태 발생의 네가지 조건 중에서 어느 하나를 제거함으로써 수행된다. 자원 낭비가 가장 심한 기법
1) 상호 배제(Mutual Exclusion)부정
한번에 여러개의 프로세스가 공유 자원을 사용할 수 있도록 한다.
2) 점유 및 대기(Hold and Wait) 부정
프로세스가 실행되기 전 필요한 모든 자원을 할당하여 프로세스 대기를 없애거나, 자원이 점유되지 않은 상태에서만 자원을 요구하도록 한다.
3) 비선점(Non-preemption)부정
자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다.
4) 환형 대기(Circular Wait)부정
자원을 선형 순서로 분류하여 고유 번호를 할당하고, 각 프로세스는 현재 점유한 자원의 고유 번호보다 앞이나 뒤 어느 한쪽 방향으로만 자원을 요구하도록 한다.
🍏 주로 원형 대기를 배제를 한다. 제일 간편함. 하나의 프로세스 안에서 어떠한 하나의 스레드에서만 독점권을 줌.
ex) 카카오톡 채팅 중에 사진첨부를 동시에 할 수 없다.