Sobes.tech
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.