카운터 초기화
사용 가능한 자원 개수나 빈 버퍼 칸 수를 세마포어 초기값으로 둔다.
count세마포어는 카운터와 대기 큐로 자원 개수와 진입 순서를 제어하며 P(wait)와 V(signal)의 순서가 정확해야 한다.
사용 가능한 자원 개수나 빈 버퍼 칸 수를 세마포어 초기값으로 둔다.
count진입 전 카운터를 줄이고 음수가 되거나 0이면 대기 큐에서 잠든다.
wait공유 버퍼나 자원에 접근할 때 mutex와 counting semaphore를 조합한다.
critical path작업 후 카운터를 늘리고 기다리는 스레드를 깨워 다음 진행을 허용한다.
signalproducer: P(empty) -> P(mutex) -> put -> V(mutex) -> V(full)
consumer: P(full) -> P(mutex) -> get -> V(mutex) -> V(empty)