condition variable

조건 변수는 신호보다 조건 재검사가 핵심이다

wait는 mutex를 내려놓고 잠들며, 깨어난 뒤에는 조건이 여전히 참인지 while로 다시 확인해야 한다.

lock mutex 획득 조건과 상태 보호
check while predicate 조건이 거짓이면 대기
wait unlock + sleep 깨어나면 재획득
signal state changed 대기자에게 재검사 기회
규칙
이유
깨지는 경우
while 사용
spurious wake 대응
if만 쓰면 잘못 통과
상태 먼저 변경
신호 의미 보존
lost wakeup
mutex와 함께
조건 일관성
경쟁으로 값 변경
signal/broadcast
깨울 범위 선택
불필요한 깨움 과다
핵심 wait는 mutex를 내려놓고 잠들며, 깨어난 뒤에는 조건이 여전히 참인지 while로 다시 확인해야 한다.