쉬운 코드 님의 영상을 보고 정리한 글 입니다
In concurrent programming, a monitor is a synchronization construct that allows threads to have both mutual exclusion and the ability to wait (block) for a certain condition to become false
하는 책임을 가진 스레드 간 동기화 보장 방식이다.
mutex lock 획득 (다른 스레드들은 entry queue에서 대기)
(조건을 만족하지 못하는 동안) wait (= waiting queue에서 대기)
(조건 만족 시) signal/broadcast (=다른 스레드(들) 깨움)
mutex lock 반환
Producer 스레드들은 버퍼에 스레드를 enqueue 한다. 다만, 큐가 꽉 찼을 때 더 이상 enqueue 하지 못한다.
Consumer 스레드들은 버퍼에서 스레드를 dequeue 한다. 다만, 큐가 비었을 때 dequeue 하지 못한다.
✔️ Producer: 큐가 꽉 찼을 때, 계속 돌면서 확인해야 할까 ?
✔️ Consumer: 큐가 비어있을 때, 계속 돌면서 확인해야 할까 ?
Producer
while (q.isFull()) wait(lock, fullCV);
q.enqueue(t1);
signal(emptyCV);
Consumer
while (q.isEmpty()) wait(lock, emptyCV);
t1 = q.dequeue();
signal(fullCV);