Проверяет знание продвинутых примитивов синхронизации.
sync.Cond позволяет goroutine ждать определённого условия. Он эффективен, когда нужно будить множество ожидающих goroutine при изменении состояния.
sync.Cond используется для ожидания изменения состояния.
Он работает поверх Mutex.
Основные методы:
Wait
Signal
Broadcast
Пример:
cond := sync.NewCond(&sync.Mutex{})
cond.L.Lock()
for !ready {
cond.Wait()
}
cond.L.Unlock()Wait:
отпускает mutex
блокируется
после пробуждения снова захватывает mutex
Signal:
будит одну goroutine
Broadcast:
будит всех
Когда Cond лучше каналов:
много ожидающих goroutine
условие может меняться много раз
нужен broadcast
Каналы лучше для передачи данных, а sync.Cond для сигнализации изменения состояния.
Вывод:
Cond используется реже каналов, но полезен для сложных сценариев синхронизации.