Junior — Middle
Kaip elgiasi programa, jei vienu metu vyksta konkurencinis skaitymas iš žemėlapio?
sobes.tech AI
Atsakymas iš AI
Go kalboje vienalaikis saugus žemėlapio skaitymas nesukelia panikos ar klaidų. Problemos kyla, jei vyksta rašymas arba skaitymas ir rašymas vienu metu. Jei programoje tik keli gorutinai skaito reikšmes iš žemėlapio be jų keitimo, tai yra saugu. Bet jei bent viena gorutina keičia žemėlapį, būtina naudoti sinchronizacijos mechanizmus, pvz., sync.RWMutex arba sync.Map.
Saugus skaitymo pavyzdys naudojant sync.RWMutex:
var m = make(map[string]int)
var mu sync.RWMutex
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Taip, vienalaikis skaitymas be rašymo yra saugus, tačiau rašymo atveju reikalinga sinchronizacija.