Junior — Middle
Cum se comportă programul dacă se face o citire concurentă a valorilor din map?
sobes.tech AI
Răspuns de la AI
În Go, citirea concurentă sigură dintr-un map nu provoacă panic sau erori. Problemele apar dacă se face scriere sau citire și scriere simultan. Dacă în program doar câteva goroutines citesc valori din map fără a le modifica, acest lucru este sigur. Dar dacă cel puțin o goroutine modifică map-ul, este necesar să se utilizeze mecanisme de sincronizare, cum ar fi sync.RWMutex sau sync.Map.
Exemplu de citire sigură folosind 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
}
Astfel, citirea concurentă fără scriere este sigură, dar în cazul în care se face scriere, este necesară sincronizarea.