Junior — Middle
Come si comporta il programma se viene effettuata contemporaneamente una lettura concorrente dei valori dalla mappa?
sobes.tech AI
Risposta dell'AI
In Go, la lettura concorrente sicura di una mappa non provoca panico o errori. I problemi si verificano se si eseguono scritture o letture e scritture contemporaneamente. Se nel programma solo alcune goroutine leggono valori dalla mappa senza modificarli, è sicuro. Ma se almeno una goroutine modifica la mappa, è necessario usare meccanismi di sincronizzazione come sync.RWMutex o sync.Map.
Esempio di lettura sicura usando 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
}
In questo modo, la lettura concorrente senza scrittura è sicura, ma in presenza di scrittura è necessaria la sincronizzazione.