Sobes.tech
Junior — Middle

Cum se comportă programul dacă se face o citire concurentă a valorilor din map?

sobes.tech AI

Răspuns de la AI

În Go, citirea concurentă sigură dintr-un map nu provoacă panic sau erori. Problemele apar dacă se face scriere sau citire și scriere simultan. Dacă în program doar câteva goroutines citesc valori din map fără a le modifica, acest lucru este sigur. Dar dacă cel puțin o goroutine modifică map-ul, este necesar să se utilizeze mecanisme de sincronizare, cum ar fi sync.RWMutex sau sync.Map.

Exemplu de citire sigură folosind 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
}

Astfel, citirea concurentă fără scriere este sigură, dar în cazul în care se face scriere, este necesară sincronizarea.