Sobes.tech
Junior — Middle

Ar galima užtikrinti saugumą rašant į Map iš kelių srautų vienu metu?

sobes.tech AI

Atsakymas iš AI

Go standarto žemėlapis (map) nėra saugus vienu metu rašyti iš kelių gorutinių. Jei keli gorutinai rašo į map vienu metu be sinchronizacijos, tai sukels paniką.

Norint užtikrinti saugumą rašant vienu metu, galima:

  • Naudoti mutex (sync.Mutex arba sync.RWMutex), kad apsaugotumėte prieigą prie map.
  • Naudoti specializuotas saugias daugiagretės struktūras, pvz., sync.Map, kurios skirtos konkurenciniam prieigai.

Pavyzdys su 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
}

Arba naudoti sync.Map:

var m sync.Map

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

Taip, norint užtikrinti saugumą rašant vienu metu, būtina naudoti sinchronizaciją.