Semaphore

생산자-소비자 세마포어 동기화

bounded buffer에서는 empty, full, mutex가 각각 빈 칸 수, 채워진 칸 수, 임계구역 접근을 제어한다.

생산자와 소비자가 버퍼를 안전하게 쓰는 순서

bounded buffer

생산자 대기

empty를 기다려 빈 칸이 있을 때만 진입한다.

임계구역

mutex로 버퍼 삽입/삭제를 한 번에 한 스레드만 수행한다.

소비자 대기

full을 기다려 데이터가 있을 때만 꺼낸다.

신호 전달

작업 후 empty/full을 반대로 올려 상대를 깨운다.

Producerwait emptylock mutexbuffersignal full
읽는 법

세마포어 이름을 개수로 읽으면 흐름이 보인다. empty와 full은 자원 수, mutex는 동시에 들어갈 수 있는지의 문제다.