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.