항상 하나
의 프로세스만 진입 가능특정 이벤트
를 기다리는 프로세스가 대기procedure requestR(): # 대출
begin
if (-R_Available) then # 책을 이용가능하지 않으면
R_Free.wait(); # 기다림
R_Available <- false; # 이용가능하면 해당 상태 false
end;
procedure releaseR(): # 반납
begin
R_Available <- ture; # 이용가능하도록 True
R_Free.signal(); # 기다리고 있는 쪽에 signal
end;
ReleaseR()에서 바로 대기큐에 있는 프로세스에게 시그널을 보내도 바로 모니터로 들어올 수 없음. 모니터엔 한 프로세스만 들어올 수 있도록 되어있기 때문에
남은 작업: resource를 반납한 후 추가적으로 수행해야 하는 작업들이 있는 경우
모니터라는 영역을 lang.가 보장해주기 때문에 간단하게 구현이 가능한 것
procedure, 2가지: 물건을 넣는 것(producer가 호출), 물건을 뺴는 것(consumer가 호출)
conditional queue, 2가지: 물건을 넣을 공간이 없을 경우 기다리는 큐, 가져갈 물건이 없어서 기다리는 큐
위치, 2가지: in(producer가 물건을 넣을 위치), out(consumer가 어디서 물건을 빼갈지)
물건 수: valid bufs
critical data: in, out, valid bufs