Что такое Condition Variable

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

Ответ

Condition Variable (условная переменная) — это механизм синхронизации, позволяющий потокам ожидать выполнения определённого условия. В Go реализуется через комбинацию sync.Mutex и sync.Cond.

Пример:

var mu sync.Mutex
cond := sync.NewCond(&mu)
ready := false

// Ожидание условия
go func() {
    mu.Lock()
    for !ready {
        cond.Wait() // Разблокирует мьютекс и ждёт сигнала
    }
    mu.Unlock()
}()

// Изменение условия
mu.Lock()
ready = true
cond.Signal() // или Broadcast() для всех ждущих
mu.Unlock()

Ключевые моменты:

  • Всегда используйте Wait() в цикле проверки условия (spurious wakeups)
  • Мьютекс должен быть заблокирован перед вызовом Wait(), Signal() или Broadcast()
  • Signal() будит один случайный поток, Broadcast() — все