OS · condition

조건 변수 wait/signal 안전 패턴

조건 변수는 signal을 믿고 바로 진행하지 않고, 깨어난 뒤에도 while 조건을 다시 검사해야 안전합니다.

조건 변수 사용 단계

sync

lock mutex

공유 조건을 확인하기 전 잠금을 잡습니다.

while 조건 점검

조건이 만족될 때까지 반복 검사합니다.

cond wait

대기하면서 mutex를 놓고 깨어나면 다시 잡습니다.

signal/broadcast

상태 변경자가 대기 스레드를 깨웁니다.

recheck

허위 각성이나 경쟁 때문에 조건을 다시 확인합니다.

lock while condition wait signal recheck

조건 변수 wait/signal 안전 패턴 정리

조건 변수의 정석은 if가 아니라 while입니다. 깨어났다는 사실과 조건이 참이라는 사실은 같은 말이 아닙니다.