다중 프로그래밍 환경에서는 여러 스레드가 한정된 자원을 사용하려고 서로 경쟁할 수 있다.

한 스레드가 자원을 요청했을 때, 그 시각에 그 자원을 사용할 수 없는 상황이 발생할 수 있다.

<aside> 💡 교착 상태대기 중인 스레드들이 요청한 자원들이 다른 스레드들에 의해 점유 되어 있고, 그들도 다 대기 상태에 있기 때문에 다시는 그 상태를 변경시킬 수 없는 상황

</aside>


1. 시스템 모델

시스템은 경쟁하는 스레드들 사이에 분배되어야 할 유한한 수의 자원들로 구성된다.

스레드는 자원을 사용하기 전에 반드시 요청해야 하고, 사용 후에는 반드시 방출해야 한다.

스레드는 지정된 태스크를 수행하기 위해, 필요한 만큼의 자원을 요청할 수 있다.