Comments 4
Полезное новшество, но вот качество статьи сомнительно.
"усыпает" - что за слово такое? Засыпает, усыпляет?
С переменными в первом классе бардак, некоторые с подчёркиванием в конце, некоторые - без.
atomic_flag скорее хорошая альтернатива для "недолгих" ожиданий без смены контекста.
Зачем же так тесты-то писать...
В
wait
мы передаем заблокированныйstd::unique_lock
,wait
снимает временно блокировку и усыпает (не всегда: когда предикат в wait истинный может и не уснуть).
Подкорректирую последовательность операций.
Wait сначала проверяет предикат (если он есть), а потом уже снимает блокировку и начинает принимать уведомления, усыпляя поток. Причём, делает это фактически атомарно (т.е. между снятием блокировки и началом приёма уведомлений другой поток вклиниться не может – это тоже важно). После пробуждения устанавливает блокировку обратно (здесь тоже обычно есть оптимизация, из-за которой рекомендуют notify ставить перед unlock'ом) и снова идёт на проверку предиката.
Если предикат есть и возвращает true, никаких unlock'ов не будет.
std::conditional_variable и std::atomic_flag в С++20