Condition Variable

조건 변수는 조건이 참이 될 때까지 잠들게 합니다

대기자는 뮤텍스를 잡고 조건을 확인한 뒤, 거짓이면 wait 중에 뮤텍스를 풀고 알림을 기다립니다.

대기 타입std::unique_lockwait 내부에서 잠금 해제와 재잠금을 원자적인 대기 절차로 묶습니다.
생산자-소비자큐가 비어 있으면 소비자는 자지 않고 대기하고, 생산자는 push 후 알림을 보냅니다.
predicate

조건 재확인 람다

wait(lock, []{ ... }) 형태는 가짜 깨어나기를 안전하게 처리합니다.

notify_one

대기자 하나를 깨웁니다

하나의 데이터 조각을 하나의 소비자가 가져가는 큐에 적합합니다.

notify_all

종료나 상태 전환을 모두 알립니다

생산 완료 플래그처럼 여러 대기자가 같은 사실을 알아야 할 때 사용합니다.

wait 진입조건이 거짓이면 뮤텍스를 자동으로 해제하고 스레드는 대기 상태가 됩니다.
깨어남알림 또는 가짜 깨어나기 후 뮤텍스를 다시 잠그고 predicate를 재평가합니다.
타임아웃wait_forwait_until은 무한 대기가 곤란한 작업에서 응답성을 유지합니다.

대기 조건 조건 변수는 알림 자체를 저장하지 않습니다. 공유 상태와 predicate를 기준으로 기다리고, 알림은 재검사를 시작하는 신호로 봅니다.