두 소비자와 한 항목의 경쟁

전체 알림 뒤에도 실제 원소를 차지하는 소비자는 하나뿐이다.

1

공동 대기

queue empty

두 소비자가 같은 조건을 기다린다.

2

한 항목 추가

size = 1

생산자가 상태 변경을 알린다.

3

첫 소비 성공

size = 0

잠금을 먼저 얻은 스레드가 값을 제거한다.

4

둘째 재검사

empty again

뒤늦은 스레드는 다시 잠들어야 한다.

핵심: 한 번 참이었던 조건은 다른 스레드의 상태 전이로 다시 거짓이 될 수 있다.