Sobes.tech
Middle+

Quelles primitives de synchronisation des goroutines existent en Go?

sobes.tech IA

Réponse de l'IA

En Go, les primitives principales utilisées pour synchroniser les goroutines sont :

  • Mutex (sync.Mutex) — assure une exclusion mutuelle, bloquant l'accès aux ressources partagées.
  • RWMutex (sync.RWMutex) — extension de Mutex permettant à plusieurs goroutines de lire simultanément, mais bloquant l'écriture.
  • WaitGroup (sync.WaitGroup) — permet d'attendre la fin d'un ensemble de goroutines.
  • Channel (chan) — canal pour transmettre des données entre goroutines, assurant la synchronisation via l'envoi de messages.
  • Once (sync.Once) — garantit qu'une fonction spécifique ne s'exécutera qu'une seule fois.
  • Cond (sync.Cond) — variable conditionnelle pour une synchronisation plus complexe, comme attendre un certain état.

Exemple d'utilisation de WaitGroup et Mutex :

var mu sync.Mutex
var wg sync.WaitGroup
var counter int

func increment() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}

func main() {
    wg.Add(3)
    go increment()
    go increment()
    go increment()
    wg.Wait()
    fmt.Println("Compteur:", counter)
}