Back to questions
Junior — Middle
79
Можете объяснить, что такое условная переменная sync.Cond в языке Go и для чего она используется?
Answer from AI
sobes.tech AI
В языке Go sync.Cond — это структура, реализующая условную переменную, которая используется для синхронизации горутин. Она позволяет одной или нескольким горутинам ждать наступления определённого условия и уведомлять другие горутины о том, что это условие изменилось.
Основные методы sync.Cond:
Wait()— блокирует текущую горутину до тех пор, пока другая горутина не вызоветSignal()илиBroadcast().Signal()— пробуждает одну горутину, ожидающую на условной переменной.Broadcast()— пробуждает все горутины, ожидающие на условной переменной.
Пример использования:
var mu sync.Mutex
cond := sync.NewCond(&mu)
// Горутинa, которая ждёт сигнала
go func() {
mu.Lock()
cond.Wait() // ждём сигнала
// после пробуждения выполняем действия
mu.Unlock()
}()
// Горутинa, которая посылает сигнал
mu.Lock()
cond.Signal() // пробуждаем одну горутину
mu.Unlock()
Таким образом, sync.Cond помогает координировать работу нескольких горутин, ожидающих наступления определённых условий.