Sobes.tech
Junior — Middle

O que acontece se várias goroutines tentarem aceder simultaneamente a uma mesma chave num mapa?

sobes.tech IA

Resposta da IA

Em Go, um mapa (map) não é uma estrutura de dados segura para acesso concorrente. Se várias goroutines tentarem ler e/ou escrever no mesmo mapa sem sincronização, isso levará a condições de corrida e, provavelmente, a um pânico em tempo de execução.

Para evitar isso, é necessário usar mecanismos de sincronização, por exemplo:

  • sync.Mutex para bloquear o acesso ao mapa.
  • sync.RWMutex para separar bloqueios de leitura e escrita.
  • Estruturas especializadas, como sync.Map, que são seguras para acesso concorrente.

Exemplo de uso de sync.Mutex para proteger um mapa:

var mu sync.Mutex
var m = make(map[string]int)

func write(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}