모니터

뮤텍스와 세마포어는 **타이밍 에러 (timing error)**와 같은 문제가 자주 발생한다.

타이밍 에러는 항상 발생하지도 않고 발견도 쉽지 않기 때문에 굉장히 까다로운 문제이다.

ex) 이진 세마포어를 사용하여 1로 초기화한 경우, wait()을 수행한 뒤 signal()을 수행해야 하는 일련의 순서를 지켜야 한다. 이 순서를 지키지 않으면 두 프로세스가 동시에 임계 영역에 접근하게 되어 경쟁 상태와 같은 문제가 발생한다.

High - level의 동기화 도구인 **모니터 (monitor)**라는 동기화 도구를 사용하여 문제를 해결하자

모니터 내부에서는 항상 하나의 프로세스만이 활성화되도록 보장해 주므로, 프로그래머가 동기화 제약 조건을 명시적으로 프로그래밍해야 할 필요가 없다는 장점이 있다.

모니터 타입 (monitor type)

함수 + 인스턴스 상태를 정의하는 변수를 선언

Untitled

모니터 선언 → 모니터 block내에서 함수 선언 : 모니터 내에서 함수들은 동기화 된다.

Untitled

Conditional Variables (조건변수)