Sobes.tech
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.