Junior — Middle
Ako sa správa program, ak súčasne prebieha konkurenčné čítanie hodnôt z mapy?
sobes.tech AI
Odpoveď od AI
V jazyku Go nie je súčasné bezpečné čítanie z mapy spôsobujúce paniku alebo chyby. Problémy nastávajú, ak sa súčasne vykonáva zápis alebo čítanie a zápis. Ak v programe iba niekoľko gorutín číta hodnoty z mapy bez ich zmeny, je to bezpečné. Ale ak aspoň jedna gorutina mení mapu, je potrebné použiť mechanizmy synchronizácie, ako je sync.RWMutex alebo sync.Map.
Príklad bezpečného čítania 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 súčasné čítanie bez zápisu bezpečné, ale pri zápise je potrebná synchronizácia.