Back to questions
Junior — Middle
81
Применяли ли вы механизм синхронизации с помощью sync.Cond в своих проектах?
Answer from AI
sobes.tech AI
В проектах на Go я использовал sync.Cond для организации ожидания и уведомления между горутинами, когда нужно было реализовать условную синхронизацию. Например, когда одна горутина должна ждать, пока другая выполнит определённое действие или изменит состояние.
Пример использования sync.Cond:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
mu := sync.Mutex{}
cond := sync.NewCond(&mu)
ready := false
go func() {
time.Sleep(time.Second)
mu.Lock()
ready = true
cond.Signal() // уведомляем ожидающую горутину
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // ждем сигнала
}
fmt.Println("Горутина готова")
mu.Unlock()
}
Такой подход полезен, когда нужно более тонко контролировать состояние и синхронизацию, чем просто использовать каналы.