Junior — Middle
Je možné bezpečne čítať údaje zo štruktúry dátovej mapy bez rizika vzniku chýb?
sobes.tech AI
Odpoveď od AI
V Go je čítanie z mapy bezpečné, ak v danom momente nikto mapu nemení. Avšak, ak paralelne dochádza k zápisu (pridanie, odstránenie alebo zmena prvkov), čítanie môže viesť k panike (runtime error).
Pre bezpečné čítanie z mapy v prostredí s viacerými vláknami sa zvyčajne používajú:
- sync.RWMutex — na uzamknutie mapy pri zápise a umožnenie paralelného čítania
- sync.Map — špecializovaná, vlákno-bezpečná dátová štruktúra pre mapy
Príklad s 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
}
Takto je možné bezpečne čítať, ak je zabezpečená synchronizácia s zápisom.