Pull to refresh

Comments 4

Полезное новшество, но вот качество статьи сомнительно.

"усыпает" - что за слово такое? Засыпает, усыпляет?

С переменными в первом классе бардак, некоторые с подчёркиванием в конце, некоторые - без.

atomic_flag скорее хорошая альтернатива для "недолгих" ожиданий без смены контекста.

В wait мы передаем заблокированный std::unique_lockwait снимает временно блокировку и усыпает (не всегда: когда предикат в wait истинный может и не уснуть).

Подкорректирую последовательность операций.

Wait сначала проверяет предикат (если он есть), а потом уже снимает блокировку и начинает принимать уведомления, усыпляя поток. Причём, делает это фактически атомарно (т.е. между снятием блокировки и началом приёма уведомлений другой поток вклиниться не может – это тоже важно). После пробуждения устанавливает блокировку обратно (здесь тоже обычно есть оптимизация, из-за которой рекомендуют notify ставить перед unlock'ом) и снова идёт на проверку предиката.

Если предикат есть и возвращает true, никаких unlock'ов не будет.

Sign up to leave a comment.

Articles