Sobes.tech
Middle

Comment éviter la condition de course ? Comment fonctionne un Mutex ?

sobes.tech IA

Réponse de l'IA

Une course de données se produit lorsque plusieurs goroutines accèdent simultanément à une ressource partagée pour la lecture et l’écriture sans synchronisation, ce qui conduit à des résultats imprévisibles.

Pour éviter les courses de données en Go, on utilise des mécanismes de synchronisation, comme sync.Mutex. Un Mutex (exclusion mutuelle) est un primitive qui garantit qu’une seule goroutine peut exécuter une section critique du code à la fois.

Principe de fonctionnement du Mutex :

  • Avant d’accéder à la ressource partagée, la goroutine appelle Lock(), bloquant le mutex.
  • Si le mutex est déjà verrouillé, la goroutine attend qu’il soit libéré.
  • Après avoir terminé avec la ressource, on appelle Unlock(), libérant le mutex.

Exemple d’utilisation du Mutex en Go :

import (
    "fmt"
    "sync"
)

func main() {
    var mu sync.Mutex
    compteur := 0

    increment := func() {
        mu.Lock()
        defer mu.Unlock()
        compteur++
    }

    var wg sync.WaitGroup
    for i := 0; i < 1000; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            increment()
        }()
    }
    wg.Wait()
    fmt.Println("Compteur:", compteur)
}

Ainsi, l’utilisation de Mutex empêche l’accès simultané aux données partagées et évite les courses.