Sobes.tech
Junior — Middle

Como se comporta o programa se ocorrer uma leitura concorrente de valores do map ao mesmo tempo?

sobes.tech IA

Resposta da IA

Em Go, a leitura concorrente segura de mapas não provoca pânico nem erros. Os problemas surgem se ocorrerem operações de escrita ou leitura e escrita simultaneamente. Se apenas várias goroutines lerem valores do mapa sem modificá-los, isso é seguro. Mas se pelo menos uma goroutine modificar o mapa, é necessário usar mecanismos de sincronização, como sync.RWMutex ou sync.Map.

Exemplo de leitura segura usando 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
}

Desta forma, a leitura concorrente sem escrita é segura, mas quando há escrita, é necessária sincronização.