Sobes.tech
Middle — Middle+

Este sigur să efectuați o scriere în containerul map într-un mediu multi-thread fără sincronizare suplimentară?

sobes.tech AI

Răspuns de la AI

În Go, harta standard (map) nu este sigură pentru scriere în medii concurente. Dacă mai multe goroutines scriu simultan în map fără sincronizare, acest lucru va duce la condiții de cursă și panic în timpul execuției.

Pentru a scrie în siguranță într-o map în medii multi-thread, trebuie să folosiți:

  • sync.Mutex sau sync.RWMutex pentru blocarea accesului;
  • sync.Map, o implementare sigură pentru concurență a hărții din biblioteca standard.

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

Fără această sincronizare, scrierea în map nu este sigură.