Ответ
sync.Cond в Go - это примитив синхронизации для ожидания или оповещения горутин об изменении состояния. Основан на условии (condition variable) и требует связанного sync.Mutex или sync.RWMutex.
Основные методы:
Wait()- освобождает мьютекс и блокирует горутину до вызоваSignal()/Broadcast()Signal()- пробуждает одну случайную горутинуBroadcast()- пробуждает все ожидающие горутины
Пример:
var (
mu sync.Mutex
cond = sync.NewCond(&mu)
ready bool
)
func worker() {
mu.Lock()
for !ready {
cond.Wait() // ждем сигнала
}
mu.Unlock()
fmt.Println("Работаем!")
}
func main() {
go worker()
time.Sleep(time.Second)
mu.Lock()
ready = true
cond.Signal() // пробуждаем worker
mu.Unlock()
}