Junior — Middle
¿Cómo garantizar la seguridad al trabajar con Map en un entorno multihilo?
sobes.tech AI
Respuesta de la IA
En Go, el mapa estándar (map) no es seguro para el acceso concurrente para lectura y escritura desde diferentes goroutines. Para garantizar la seguridad al trabajar con mapas en entornos multihilo, se puede usar:
- Mutexes (sync.Mutex o sync.RWMutex) — bloquean el acceso al mapa durante la lectura/escritura.
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
- sync.Map — estructura especializada segura para hilos de la biblioteca estándar, optimizada para casos con muchas goroutines.
var m sync.Map
func write(key string, value int) {
m.Store(key, value)
}
func read(key string) (int, bool) {
val, ok := m.Load(key)
if !ok {
return 0, false
}
return val.(int), true
}
La elección depende de la tarea específica: si se necesitan muchas operaciones de escritura y lectura, es mejor usar mutexes; si las operaciones son principalmente lectura, sync.Map puede ser más eficiente.