safe pattern

조건 변수 코드는 네 줄의 순서를 지켜야 안전하다

생산자-소비자 코드가 길어져도 핵심은 공유 상태 변경, notify, predicate 대기, 종료 조건 처리입니다.

상태를 lock 안에서 바꾼다 큐 push, done 플래그 변경처럼 predicate가 보는 값을 같은 mutex로 보호합니다.
상태 변경 뒤 notify한다 notify_one은 한 소비자, notify_all은 종료 전파에 어울립니다.
wait는 predicate와 함께 쓴다 cv.wait(lock, pred)가 깨어날 때마다 조건을 다시 검사합니다.
종료 조건을 별도로 둔다 큐가 비었고 생산도 끝났다는 조건이 있어야 소비자가 루프를 빠져나옵니다.
요약 조건 변수는 “잠드는 도구”가 아니라, 공유 상태가 바뀔 때까지 안전하게 다시 확인하는 계약입니다.