Условная переменная: ожидание события с разблокировкой мьютекса. Wait() атомарно разблокирует мьютекс и блокирует горутину; при пробуждении снова захватывает мьютекс. Signal() будит одну, Broadcast() - всех. Используют для ожидания условия под мьютексом (очередь, готовность данных).
cond := sync.NewCond(&mu)
// waiter: mu.Lock(); for !condition { cond.Wait() }; ...; mu.Unlock()
// signaller: mu.Lock(); condition=true; cond.Signal(); mu.Unlock()