Middle — Middle+
Peut-on effectuer en toute sécurité une écriture dans un conteneur map dans un environnement multithread sans synchronisation supplémentaire?
sobes.tech IA
Réponse de l'IA
En Go, la carte standard (map) n'est pas sûre pour l'écriture dans un environnement concurrent. Si plusieurs goroutines écrivent simultanément dans une map sans synchronisation, cela entraînera des conditions de course et des paniques à l'exécution.
Pour écrire en toute sécurité dans une map dans un environnement multithread, il faut utiliser :
- sync.Mutex ou sync.RWMutex pour verrouiller l'accès ;
- sync.Map, une implémentation de carte sûre pour la concurrence dans la bibliothèque standard.
Exemple avec sync.Mutex :
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Sans cette synchronisation, l'écriture dans une map n'est pas sûre.