semaphore count

세마포어 값 해석

wait와 signal은 카운터만 바꾸는 함수가 아니라 대기 큐에 넣고 깨우는 스케줄링 사건까지 포함합니다.

value > 0즉시 통과 가능
wait카운터 감소
value < 0절대값만큼 대기
signal하나 깨우기
Counting Semaphore

초기값만큼 여러 스레드가 동시에 통과합니다.

Binary Semaphore

0과 1만 쓰면 뮤텍스처럼 한 번에 하나만 통과시키는 보호 장치가 됩니다.

wait 연산

값을 줄인 뒤 음수가 되면 호출 스레드는 대기 큐에서 잠듭니다.

signal 연산

값을 늘리고 대기 중인 스레드가 있으면 하나를 Ready 상태로 되돌립니다.

생산자-소비자

empty/full 카운터를 나눠 넘침과 언더플로를 막습니다.

독자-저자

독자는 공유, 저자는 단독 진입으로 카운터와 mutex를 함께 봅니다.