큐 비어 있음, 완료 플래그처럼 기다릴 조건의 실제 값입니다.
조건 변수는 “상태를 바꾸고, 알리고, 다시 검사한다”는 계약이다
조건 변수는 값을 저장하지 않습니다. 실제 조건은 공유 상태에 있고, 대기자와 알림자가 같은 mutex 아래에서 그 상태를 다룹니다.
대기자와 생산자가 같은 상태를 같은 락으로 읽고 씁니다.
잠들기 전과 깨어난 뒤 조건식을 모두 검사합니다.
상태를 참으로 바꾼 뒤 대기자에게 다시 확인하라고 알립니다.
깨어났다는 사실이 아니라 predicate가 참일 때만 진행합니다.
상태
조건의 진짜 값은 변수에 둔다.
락
상태를 읽고 쓰는 모든 쪽이 같은 mutex를 쓴다.
조건식
spurious wakeup 때문에 깨어난 뒤에도 다시 검사한다.
알림
notify는 “진행해도 된다”가 아니라 “다시 확인하라”는 신호다.