Sobes.tech
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.Mutex per bloccare l'accesso alla mappa.
  • sync.RWMutex per 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]
}