OS · condition

조건 변수 wait/signal 안전 패턴

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

조건 변수 사용 단계

sync

lock mutex

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

while check

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

cond wait

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

signal/broadcast

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

recheck

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

lock while condition wait signal recheck

정리

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