func (*Cond) Wait
func (c *Cond) Wait()
Wait атомически разблокирует c.L и приостанавливает выполнение вызова goroutine. После возобновления выполнения Wiat блокирует c.L перед возвратом. В отличие от других систем, Wait не может быть возвращен, если он не проснулся с помощью Broadcast или Signal.
Поскольку c.L не блокируется при первом возобновлении Wait, вызывающий объект обычно не может предположить, что при возвращаете Wait условие будет истинно. Вместо этого вызывающий оператор должен прогнать Wait в цикле:
c.L.Lock()
for !condition() {
c.Wait()
}
... make use of condition ...
c.L.Unlock()