Junior — Middle
Comment peut-on éliminer les conditions de course qui surviennent lors de l'accès simultané aux ressources dans un environnement multithread?
sobes.tech IA
Réponse de l'IA
Pour éviter les conditions de course dans un environnement multithread en Go, plusieurs approches peuvent être utilisées:
-
Mutex (sync.Mutex) — bloquent l'accès à une ressource partagée, permettant à un seul goroutine de l'utiliser à la fois.
-
Canaux (channels) — permettent d'organiser un échange sécurisé de données entre goroutines, évitant l'accès direct aux variables communes.
-
Package sync/atomic — fournit des opérations atomiques pour travailler avec des types primitifs, aidant à éviter les conditions de course lors d'opérations simples.
Exemple avec mutex:
import (
"sync"
)
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Utilisation des canaux:
ch := make(chan int)
func worker() {
for val := range ch {
// traitement de val
}
}
func main() {
go worker()
ch <- 42
close(ch)
}
Le choix de la méthode dépend de la tâche spécifique et de la structure du programme.