Sobes.tech
Назад к вопросам
Junior — Middle
78

Можете объяснить, что такое условная переменная sync.Cond в языке Go и для чего она используется?

Ответ от нейросети

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 помогает координировать работу нескольких горутин, ожидающих наступления определённых условий.