Что такое sync.Cond

«Что такое sync.Cond» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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()
}