조건 검사
락을 잡은 상태에서 버퍼가 비었는지, 가득 찼는지 확인한다.
조건 변수의 안전성은 락 반납과 대기 등록의 원자성, 그리고 깨어난 뒤 while 재검사까지 포함한 규칙에서 나온다.
락을 잡은 상태에서 버퍼가 비었는지, 가득 찼는지 확인한다.
조건이 거짓이면 wait이 락 반납과 큐 등록을 끊기지 않게 수행한다.
생산자나 소비자가 상태를 바꾼 뒤 대기자를 깨운다.
깨어난 스레드는 곧바로 실행하지 않고 모니터 락을 다시 경쟁한다.
다른 스레드가 먼저 자원을 가져갔거나 허위 각성이면 다시 기다린다.
락 반납과 큐 등록 사이에 signal이 끼어들 수 없게 한다.
깨웠다는 사실이 조건 참을 보장하지 않으므로 while로 감싼다.
여러 스레드가 깨어나도 락은 하나씩만 얻으므로 조건을 다시 확인한다.