Junior — Middle
È sicuro usare risorse condivise come Map quando si accede contemporaneamente da più goroutine?
sobes.tech AI
Risposta dell'AI
No, la mappa standard in Go non è sicura per l'accesso concorrente e non può essere utilizzata contemporaneamente da più goroutine senza sincronizzazione aggiuntiva. L'accesso concorrente senza protezione può causare condizioni di gara e panico.
Per usare in modo sicuro risorse condivise come le mappe in ambienti multithread, si può:
- Usare sync.Mutex o sync.RWMutex per proteggere l'accesso alla mappa.
- Utilizzare sync.Map, una struttura dati specializzata e sicura per le mappe.
Esempio con mutex:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
Utilizzo di sync.Map:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")