상태를 monitor 안에 숨긴다
queue, count, flag 같은 공유 데이터는 monitor procedure를 통해서만 바꾸게 한다.
모니터는 lock으로 보호되는 데이터와 그 데이터를 기다리는 조건을 함께 묶는다. 조건 변수는 알림 자체가 아니라 상태 predicate를 다시 확인해야 한다.
queue, count, flag 같은 공유 데이터는 monitor procedure를 통해서만 바꾸게 한다.
condition variable에서 깨어난 뒤에도 predicate가 참인지 다시 확인해야 한다.
상태를 바꾼 뒤 대기자가 다시 진행할 수 있을 때 signal 또는 broadcast를 보낸다.
lock(m);
while (queue.empty()) wait(notEmpty, m);
item = queue.pop();
unlock(m);