Junior — Middle
É possível garantir a segurança ao gravar em um Map a partir de vários threads ao mesmo tempo?
sobes.tech IA
Resposta da IA
Em Go, o mapa padrão (map) não é seguro para acesso concorrente em escrita por várias goroutines. Se várias goroutines escreverem simultaneamente num map sem sincronização, ocorrerá um pânico.
Para garantir a segurança na escrita concorrente, pode-se:
- Usar um mutex (sync.Mutex ou sync.RWMutex) para proteger o acesso ao map.
- Usar estruturas de dados seguras para concorrência, como o sync.Map, que é projetado para acesso concorrente.
Exemplo com mutex:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Ou usar sync.Map:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
Assim, para segurança na escrita concorrente, deve-se usar sincronização.