Sobes.tech
Senior

Este posibil să scrii într-un map din mai multe goroutines în același timp? Ce se va întâmpla?

sobes.tech AI

Răspuns de la AI

În Go, nu se poate scrie în mod sigur într-un map din mai multe goroutine-uri simultan fără sincronizare suplimentară. Map-ul standard nu este sigur pentru concurență, iar operațiile de scriere simultană pot duce la panic (runtime panic) sau corupție de date.

Pentru a utiliza în siguranță un map într-un mediu concurent, se poate:

  • Folosi sync.Mutex sau sync.RWMutex pentru a proteja accesul la map.
  • Folosi sync.Map, o structură de date specializată și sigură pentru concurență.

Exemplu cu mutex:

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

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

Fără această protecție, programul poate înceta neașteptat.