Как работает sync.Cond.Wait?

Middle
179 просмотров
AFK Offer AI

Wait() делает три вещи атомарно: отпускает mutex, ставит горутину в очередь ожидания, усыпляет её. Когда Signal/Broadcast разбудит — Wait заново захватывает mutex и возвращается. Важно: Wait нужно вызывать в цикле! for !condition() { cond.Wait() }. Почему — spurious wakeup: горутина может проснуться без Signal, или условие могло измениться между Signal и захватом mutex. Без цикла — баг, который воспроизводится раз в тысячу.

Следующий вопрос

Что такое constructor injection?