상호배제(한 프로세스가 임계영역에 들어가면 다른 프로세스는 못들어감), 한정대기(어떤 프로세스도 무한정 기다리지 않고 자원에 대한 접근 권한을 얻을 수 있어야 한다. 프로세스가 자원을 요청하고 받기까지의 대기시간은 한정됨), 진행의 융통성 (사용 가능한 자원에 대해 대기중인 프로세스들이 있다면, 그중 하나는 반드시 자원을 할당받아 진행할 수 있어야 한다)를 만족시켜 경쟁상태를 해결
wait()
와 signal()
을 통해 자원의 접근을 관리. 바이너리 세마포어(한 번에 공유 자원에 접근 가능한 프로세스나 스레드 수 최대 1개)와 카운팅 세마포어 존재여러 프로세스가 서로 다른 프로세스가 가진 자원을 기다리면서 중단된 상태