Sobes.tech
Junior — Middle

¿Qué sucede si varias goroutines intentan acceder simultáneamente a la misma clave en un mapa?

sobes.tech AI

Respuesta de la IA

En Go, un mapa (map) no es una estructura de datos segura para el acceso concurrente. Si varias goroutines intentan leer y/o escribir en el mismo mapa sin sincronización, esto provocará condiciones de carrera y, probablemente, un pánico en tiempo de ejecución.

Para evitar esto, es necesario usar mecanismos de sincronización, por ejemplo:

  • sync.Mutex para bloquear el acceso al mapa.
  • sync.RWMutex para separar los bloqueos de lectura y escritura.
  • Estructuras especializadas, como sync.Map, que son seguras para acceso concurrente.

Ejemplo de uso de sync.Mutex para proteger un 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]
}