Junior — Middle
Heeft u in uw projecten een synchronisatie-mechanisme met sync.Cond gebruikt?
sobes.tech AI
Antwoord van AI
In Go-projecten heb ik sync.Cond gebruikt om het wachten en de notificatie tussen goroutines te organiseren, wanneer conditionele synchronisatie nodig was. Bijvoorbeeld wanneer een goroutine moet wachten tot een andere een bepaalde actie uitvoert of de status wijzigt.
Voorbeeld van het gebruik van 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() // notificatie aan de wachtende goroutine
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // wacht op signaal
}
fmt.Println("Goroutine klaar")
mu.Unlock()
}
Deze aanpak is handig wanneer je meer fijnmazige controle over de status en synchronisatie nodig hebt dan alleen het gebruik van kanalen.