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