모니터는 프로그래밍 언어 차원에서 제공된다.
공유 데이터와 operation이 모니터 내부에 있기 때문에, 세마포어처럼 P,V를 따로 걸어줄 필요가 없다.
모니터 내부에 들어간다면 미리 정해진 operation만 보고 따라하면 되는 것이다.
이처럼 개발자 입장에서 자연스럽고 편하다.
모니터를 사용해 이전 '생산자-소비자'문제를 다시 코딩해보자.
먼저 공유 자원 buffer를 위해 P, V 연산이 필요없다. 이미 모니터 타입 내부이기에.
여기서 Condition Variable은 full, empty이다.(full: 생산자 입장에서 공간 없을 경우 / empty : 소비자 입장에서 데이터 없을 경우)
코드를 읽기도 더 편하다.
Produce에서 만약 빈 공간이 없다면, empty.wait으로 자리가 날 때 까지 프로세스를 sleep 한다.
만약 빈 공간 있다면, 데이터를 쓰고, 혹시 데이터 기다리면서 sleep인 소비자가 있다면 깨워주는 full.signal을 하는 것이다.
consume에서도 정확히 반대로 똑같다.
다음은 식사하는 철학자 문제를 모니터로 코딩한 경우이다.
그냥 그런갑다 하고 넘기자.