Junior — Middle
Използвали ли сте механизъм за синхронизация с sync.Cond в проектите си?
sobes.tech AI
Отговор от 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()
}
Този подход е полезен, когато е необходимо по-фино контролиране на състоянието и синхронизацията, отколкото просто използване на канали.