Sobes.tech
Junior — Middle

Comment le programme se comporte-t-il si une lecture concurrente des valeurs du map est effectuée simultanément?

sobes.tech IA

Réponse de l'IA

En Go, la lecture concurrente sécurisée d'une carte ne provoque pas de panic ni d'erreurs. Les problèmes surviennent si une écriture ou une lecture-écriture se produit simultanément. Si vous lisez et écrivez dans une carte sans synchronisation, le programme peut provoquer un panic en temps d'exécution avec le message "concurrent map read and map write".

Si dans le programme seules plusieurs goroutines lisent des valeurs de la carte sans les modifier, cela est sûr. Mais si au moins une goroutine modifie la carte, il est nécessaire d'utiliser des mécanismes de synchronisation, comme sync.RWMutex ou sync.Map.

Exemple de lecture sécurisée avec sync.RWMutex:

var m = make(map[string]int)
var 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
}

Ainsi, la lecture concurrente sans écriture est sûre, mais en présence d'écriture, une synchronisation est nécessaire.