Sobes.tech
Junior — Middle

¿Se puede usar de manera segura recursos compartidos como Map cuando se accede a ellos desde múltiples goroutines al mismo tiempo?

sobes.tech AI

Respuesta de la IA

No, la mapa estándar en Go no es segura para el acceso concurrente y no puede usarse simultáneamente desde varias goroutines sin sincronización adicional. El acceso concurrente sin protección puede causar condiciones de carrera y pánicos.

Para usar de manera segura recursos compartidos como mapas en entornos multihilo, se puede:

  • Usar sync.Mutex o sync.RWMutex para proteger el acceso al mapa.
  • Utilizar sync.Map, una estructura de datos especializada y segura para mapas.

Ejemplo con 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")