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.