Sobes.tech
Junior — Middle

Peut-on assurer la sécurité lors de l'écriture dans une Map depuis plusieurs threads en même temps?

sobes.tech IA

Réponse de l'IA

En Go, une carte standard (map) n’est pas sûre pour l’accès concurrent en écriture depuis plusieurs goroutines. Si plusieurs goroutines écrivent simultanément dans une map sans synchronisation, cela entraînera une panique.

Pour assurer la sécurité lors de l’écriture simultanée, on peut:

  • Utiliser un mutex (sync.Mutex ou sync.RWMutex) pour protéger l’accès à la map.
  • Utiliser des structures de données sécurisées pour la concurrence, comme sync.Map, conçue pour un accès concurrent.

Exemple avec mutex:

var mu sync.Mutex
var m = make(map[string]int)

func safeWrite(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

Ou utiliser sync.Map:

var m sync.Map

func safeWrite(key string, value int) {
    m.Store(key, value)
}

Ainsi, pour la sécurité lors de l’écriture simultanée, il faut utiliser la synchronisation.