Sobes.tech
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.