Junior — Middle
É seguro usar recursos compartilhados como Map ao acessar simultaneamente de várias goroutines?
sobes.tech IA
Resposta da IA
Não, o mapa padrão em Go não é seguro para uso concorrente e não pode ser utilizado simultaneamente por várias goroutines sem sincronização adicional. O acesso simultâneo sem proteção pode causar condições de corrida e pânicos.
Para usar recursos compartilhados como mapas de forma segura em ambientes multithread, pode-se:
- Usar sync.Mutex ou sync.RWMutex para proteger o acesso ao mapa.
- Utilizar sync.Map, uma estrutura de dados especializada e segura para mapas.
Exemplo com mutex:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
Uso de sync.Map:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")