Sobes.tech
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.