
n개의 버퍼에는 1개의 item이 존재하고,
consumer는 buffer에서 item을 가져오고, producer는 buffer를 채운다.

mutex를 1로 설정해서 binary semaphore로 한다.( mutex를 준수 )
empty는 줄어들고, full은 늘어난다.

producer
buffer가 empty가 될 때까지 wait를 하는데, mutex를 획득해서 1명만 접근한다.
그런 다음, signal을 통해서 item을 채운 후, consumer에게 signal을 전송한다.
consumer
producer와 비슷하게 진행이 되는데,
signal(full) -> wait(full)

공유 데이터에 접근하는 것은 똑같은데, 어떤 process는 reader이고, 어떤 process는 reader + writer도 한다.
reader끼리는 읽기만 해서 문제가 없다.
그런데, 만약 data 변경 도중에 select를 하거나, writer가 여러개 접근을 한다면? -> X

reader, writer에 우선순위를 설정하면 무조건 starvation이 발생한다.


reader process에서 읽을거 다 읽었으면, 마지막 signal로 writer를 깨운다.

rw_mutex를 기다리는 스레드가 단일 writer와 다수 reader가 있으므로, 이 관리는 scheduler가 한다.

reader가 lock을 획득하면 여러 reader이 접근 가능하고,
writer가 lock을 획득하면 단일 writer가 접근 가능하다.

이때 사용되는 synchronized는 이 객체 CashBox에 대해서 모니터 락이 적용된다.

스레드가 buffer가 full인 경우, wait()을 통해서 lock을 release를 한다.
(단, release를 하는 스레드는 lock을 반드시 가지고 있어야 한다.)
notify를 통해서 wait를 건 모든 스레들 중 1개를 임의로 깨운다.
notify를 받으면 interruptedException이 발동

count == 0 -> empty이면, wait()을 한다.
생산자 소비자
reader-writer