Разбираем, зачем в C++ нужен
std::condition_variable даже при наличии
std::mutex, почему мы «ждём состояние, а не сигнал», и как правильно использовать
wait(lock, predicate) со
std::unique_lock. Закрепляем паттерн на примерах с флагом
ready, очередью задач и «токенами», обсуждаем
notify_one()/
notify_all() и типичные ошибки (голый
wait(lock), побочные эффекты в предикате, доступ к состоянию без мьютекса).