Junior — Middle
Cosa succede se più goroutine cercano di accedere contemporaneamente a una stessa chiave in una mappa?
sobes.tech AI
Risposta dell'AI
In Go, una mappa (map) non è una struttura dati sicura per l'accesso concorrente. Se più goroutine tentano di leggere e/o scrivere sulla stessa mappa senza sincronizzazione, si verificheranno condizioni di gara e probabilmente un panic in fase di esecuzione.
Per evitarlo, è necessario usare meccanismi di sincronizzazione, ad esempio:
sync.Mutexper bloccare l'accesso alla mappa.sync.RWMutexper separare i blocchi di lettura e scrittura.- Strutture specializzate come
sync.Map, che sono sicure per l'accesso concorrente.
Esempio di utilizzo di sync.Mutex per proteggere una mappa:
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]
}