Middle — Middle+
È possibile eseguire in modo sicuro una scrittura in un contenitore map in un ambiente multithread senza sincronizzazione aggiuntiva?
sobes.tech AI
Risposta dell'AI
In Go, la mappa standard (map) non è sicura per le scritture in ambienti concorrenti. Se più goroutine scrivono contemporaneamente in una mappa senza sincronizzazione, si verificheranno condizioni di gara e panico in fase di esecuzione.
Per scrivere in modo sicuro in una mappa in un ambiente multithread, bisogna usare:
- sync.Mutex o sync.RWMutex per bloccare l'accesso;
- sync.Map, un'implementazione di mappa sicura per la concorrenza della libreria standard.
Esempio con sync.Mutex:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Senza questa sincronizzazione, la scrittura in una mappa non è sicura.