허가 의미 결정
세마포어 값이 남은 buffer 칸인지, 채워진 item 수인지, 진입권인지 먼저 이름 붙인다.
세마포어는 정수 값과 대기 queue로 여러 실행 흐름의 통과를 제어한다. mutex처럼 하나만 막을 수도 있고, 제한된 자원 개수를 표현할 수도 있다.
세마포어 값이 남은 buffer 칸인지, 채워진 item 수인지, 진입권인지 먼저 이름 붙인다.
생산자-소비자에서는 empty, full, mutex의 wait/signal 순서가 deadlock과 race를 좌우한다.
signal은 값을 올리는 것뿐 아니라 잠든 실행 흐름이 다시 조건을 확인할 기회를 준다.
producer: wait(empty); wait(mutex); put(); signal(mutex); signal(full)
consumer: wait(full); wait(mutex); get(); signal(mutex); signal(empty)