Junior — Middle
Kaip užtikrinti saugumą dirbant su Map daugiasraityje aplinkoje?
sobes.tech AI
Atsakymas iš AI
Go kalboje standartinė kortelė (map) nėra saugi vienu metu skaityti ir rašyti iš skirtingų gorutinių. Norint užtikrinti saugumą dirbant su kortelėmis daugiagijų aplinkoje, galima naudoti:
- Užraktus (sync.Mutex arba sync.RWMutex) — blokuoja prieigą prie kortelės skaitymo/rašymo metu.
var (
m = make(map[string]int)
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
}
- sync.Map — specializuota, saugi kelių gijų struktūra iš standartinės bibliotekos, optimizuota dideliam gorutinių skaičiui.
var m sync.Map
func write(key string, value int) {
m.Store(key, value)
}
func read(key string) (int, bool) {
val, ok := m.Load(key)
if !ok {
return 0, false
}
return val.(int), true
}
Pasirinkimas priklauso nuo konkrečios užduoties: jei reikia daug rašymo ir skaitymo operacijų, geriau naudoti užraktus; jei operacijos daugiausia yra skaitymas, sync.Map gali būti efektyvesnis.