Junior — Middle
Comment assurer la sécurité lors de l'utilisation de Map dans un environnement multithread ?
sobes.tech IA
Réponse de l'IA
En Go, une carte standard (map) n’est pas sûre pour un accès concurrent en lecture et écriture depuis différentes goroutines. Pour assurer la sécurité lors de l’utilisation de maps dans un environnement multithread, on peut utiliser :
- Mutex (sync.Mutex ou sync.RWMutex) — bloquent l’accès à la map lors de la lecture/écriture.
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
- sync.Map — structure spécialisée sûre pour les threads de la bibliothèque standard, optimisée pour les cas avec beaucoup de goroutines.
var m sync.Map
func write(key string, value int) {
m.Store(key, value)
}
func read(key string) (int, bool) {
val, ok := m.Load(key)
if !ok {
return 0, false
}
return val.(int), true
}
Le choix dépend de la tâche spécifique : si beaucoup d’opérations d’écriture et de lecture sont nécessaires, il vaut mieux utiliser des mutex ; si les opérations sont principalement en lecture, sync.Map peut être plus efficace.