Sobes.tech
Junior — Middle

È possibile garantire la sicurezza durante la scrittura simultanea in una Map da più thread?

sobes.tech AI

Risposta dell'AI

In Go, la mappa standard (map) non è sicura per l'accesso concorrente in scrittura da più goroutine. Se più goroutine scrivono contemporaneamente in una map senza sincronizzazione, si verifica un panic.

Per garantire la sicurezza durante le scritture concorrenti, si può:

  • Usare un mutex (sync.Mutex o sync.RWMutex) per proteggere l'accesso alla mappa.
  • Usare strutture dati sicure per la concorrenza, come sync.Map, progettata per accessi concorrenti.

Esempio con mutex:

var mu sync.Mutex
var m = make(map[string]int)

func safeWrite(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

Oppure usare sync.Map:

var m sync.Map

func safeWrite(key string, value int) {
    m.Store(key, value)
}

Quindi, per la sicurezza durante le scritture concorrenti, bisogna usare la sincronizzazione.