Sobes.tech
Middle — Middle+

Da li je sigurno vršiti zapis u map kontejner u višestrukom okruženju bez dodatne sinhronizacije?

sobes.tech АИ

Одговор од АИ

U Go-u, standardna mapa (map) nije sigurna za pisanje u okruženju sa više niti. Ako više gorutina istovremeno pišu u mapu bez sinhronizacije, doći će do trka i panike tokom izvršavanja.

Za sigurno pisanje u mapu u višestrukom nitnom okruženju, potrebno je koristiti:

  • sync.Mutex ili sync.RWMutex za zaključavanje pristupa;
  • sync.Map, sigurnu za niti implementaciju mape iz standardne biblioteke.

Primer sa 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()
}

Bez ove sinhronizacije, pisanje u mapu nije sigurno.