Junior — Middle
Jak se chová program, pokud je současně prováděno konkurenční čtení hodnot z mapy?
sobes.tech AI
Odpověď od AI
V jazyce Go není současné bezpečné čtení z mapy panikou nebo chybami. Problémy nastávají, pokud dochází ke čtení nebo zápisu současně. Pokud v programu pouze několik gorutin čte hodnoty z mapy bez jejich změny, je to bezpečné. Pokud však alespoň jedna gorutina mění mapu, je nutné použít mechanismy synchronizace, například sync.RWMutex nebo sync.Map.
Příklad bezpečného čtení s použitím 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
}
Tím je současné čtení bez zápisu bezpečné, ale při zápisu je nutná synchronizace.