Sobes.tech
Junior — Middle

Que se passe-t-il si plusieurs goroutines tentent d'accéder simultanément à une même clé dans une carte?

sobes.tech IA

Réponse de l'IA

En Go, une carte (map) n'est pas une structure de données sûre pour l'accès concurrent. Si plusieurs goroutines tentent de lire et/ou d'écrire dans la même carte sans synchronisation, cela entraînera des conditions de course et probablement un panic à l'exécution.

Pour éviter cela, il est nécessaire d'utiliser des mécanismes de synchronisation, par exemple :

  • sync.Mutex pour verrouiller l'accès à la carte.
  • sync.RWMutex pour séparer les verrouillages de lecture et d'écriture.
  • Structures spécialisées, comme sync.Map, qui sont sûres pour l'accès concurrent.

Exemple d'utilisation de sync.Mutex pour protéger une carte :

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

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

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}