Sobes.tech
Junior — Middle

Este posibil să asigurați siguranța în timpul scrierii simultane în Map din mai multe fire?

sobes.tech AI

Răspuns de la AI

În Go, harta standard (map) nu este sigură pentru accesul concurent în scriere de către mai multe goroutines. Dacă mai multe goroutines scriu simultan în map fără sincronizare, va avea loc o panică.

Pentru a asigura siguranța în timpul scrierii concurente, se poate:

  • Folosi un mutex (sync.Mutex sau sync.RWMutex) pentru a proteja accesul la map.
  • Folosi structuri de date specializate, sigure pentru concurență, precum sync.Map, care sunt destinate accesului concurent.

Exemplu cu 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
}

Sau folosi sync.Map:

var m sync.Map

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

Astfel, pentru siguranța în timpul scrierii concurente, trebuie utilizată sincronizarea.