Junior — Middle
Ce se întâmplă dacă mai multe goroutines încearcă să acceseze simultan aceeași cheie într-un map?
sobes.tech AI
Răspuns de la AI
În Go, un map (hartă) nu este o structură de date sigură pentru accesul concurent. Dacă mai multe goroutines încearcă să citească și/sau să scrie în același map fără sincronizare, acest lucru va duce la condiții de cursă și, cel mai probabil, la panic în timpul execuției.
Pentru a evita acest lucru, este necesar să se utilizeze mecanisme de sincronizare, de exemplu:
sync.Mutexpentru blocarea accesului la map.sync.RWMutexpentru separarea blocurilor de citire și scriere.- Structuri specializate, cum ar fi
sync.Map, care sunt sigure pentru accesul concurent.
Exemplu de utilizare a sync.Mutex pentru protejarea map:
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]
}