Junior — Middle
Ar saugu naudoti saugiai skaityti duomenis iš map duomenų struktūros be klaidų rizikos?
sobes.tech AI
Atsakymas iš AI
Go kalboje skaitymas iš žemėlapio yra saugus, jei tuo metu niekas jo nekeičia. Tačiau, jei paraleliai vyksta rašymas (pridedant, šalinant ar keičiant elementus), skaitymas gali sukelti paniką (vykdymo klaidą).
Kad saugiai skaityti iš žemėlapio daugiagijų aplinkoje, dažniausiai naudojami:
- sync.RWMutex — užrakinti žemėlapį rašymui ir leisti paralelį skaitymą
- sync.Map — specializuota ir saugi duomenų struktūra žemėlapiams
Pavyzdys su RWMutex:
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) (int, bool) {
mu.RLock()
defer mu.RUnlock()
val, ok := m[key]
return val, ok
}
func write(key string, val int) {
mu.Lock()
defer mu.Unlock()
m[key] = val
}
Taip, saugus skaitymas yra įmanomas, jei užtikrinama sinchronizacija su rašymu.