Timing Errors
가 발생할 수 있고, 이는 추적하기에 몹시 까다롭다. 예를 들어 바이너리 세마포어를 사용 할 시, 각 프로세스들이 wait->signal 순서를 지켜야하는데 이를 지키지 않을 경우가 있을 수 있고, 그럴 경우 임계 영역에 두 개의 프로세스가 동시에 진입하게 되는 문제가 있다.
즉 세마포어는 프로그래머의 실수
가 유발 될 수 있으므로, 이러한 가능성을 최대한 낮춰야한다.
세마포어의 한계를 보완해주는 고차원적인 비동기 방법으로, 상호배재 속성을 제공해주는 하나의 데이터 타입이다.
아래 예제에서 monitor 블록 내부에 선언된 함수들은 모두 동기화가 된다.
monitor {
function p1(..){}
function p2(..){}
function p3(..){}
}
모니터가 자체적으로 동기화 처리하기는 어려우므로, 조건 변수
를 정의하여 동기화 메커니즘을 제공해주어야 한다.
이 때 조건 변수는 모니터 내부에서만 접근 가능하다.
condition x y;
x.wait();
y.signal();
따라서, 해당 조건변수별로 wait queue
가 분리되어 동기화가 된다.