Junior — Middle
Avez-vous utilisé un mécanisme de synchronisation avec sync.Cond dans vos projets?
sobes.tech IA
Réponse de l'IA
Dans des projets en Go, j'ai utilisé sync.Cond pour organiser l'attente et la notification entre goroutines, lorsque la synchronisation conditionnelle était nécessaire. Par exemple, lorsqu'une goroutine doit attendre qu'une autre effectue une action spécifique ou change d'état.
Exemple d'utilisation de 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() // notifier la goroutine en attente
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // attendre le signal
}
fmt.Println("Goroutine prête")
mu.Unlock()
}
Cette approche est utile lorsque vous avez besoin de contrôler plus finement l'état et la synchronisation que simplement utiliser des canaux.