Junior — Middle
Peut-on utiliser en toute sécurité des ressources partagées comme Map lors d'un accès simultané depuis plusieurs goroutines?
sobes.tech IA
Réponse de l'IA
Non, la carte standard en Go n'est pas sûre pour l'accès concurrent et ne peut pas être utilisée simultanément par plusieurs goroutines sans synchronisation supplémentaire. Un accès concurrent sans protection peut entraîner des conditions de course et des paniques.
Pour utiliser en toute sécurité des ressources partagées comme les cartes dans un environnement multithread, on peut :
- Utiliser sync.Mutex ou sync.RWMutex pour protéger l'accès à la carte.
- Utiliser sync.Map, une structure de données spécialisée et sûre pour les cartes.
Exemple avec mutex :
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
Utilisation de sync.Map :
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")