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