type Cond … // NewCond returns a new Cond with Locker l. func NewCond(l Locker) *Cond { … } // Wait atomically unlocks c.L and suspends execution // of the calling goroutine. After later resuming execution, // Wait locks c.L before returning. Unlike in other systems, // Wait cannot return unless awoken by [Cond.Broadcast] or [Cond.Signal]. // // Because c.L is not locked while Wait is waiting, the caller // typically cannot assume that the condition is true when // Wait returns. Instead, the caller should Wait in a loop: // // c.L.Lock() // for !condition() { // c.Wait() // } // ... make use of condition ... // c.L.Unlock() func (c *Cond) Wait() { … } // Signal wakes one goroutine waiting on c, if there is any. // // It is allowed but not required for the caller to hold c.L // during the call. // // Signal() does not affect goroutine scheduling priority; if other goroutines // are attempting to lock c.L, they may be awoken before a "waiting" goroutine. func (c *Cond) Signal() { … } // Broadcast wakes all goroutines waiting on c. // // It is allowed but not required for the caller to hold c.L // during the call. func (c *Cond) Broadcast() { … } type copyChecker … func (c *copyChecker) check() { … } type noCopy … // Lock is a no-op used by -copylocks checker from `go vet`. func (*noCopy) Lock() { … } func (*noCopy) Unlock() { … }