Sobes.tech
Junior — Middle

¿Cómo se comporta el programa si se realiza simultáneamente una lectura competitiva de valores desde un mapa?

sobes.tech AI

Respuesta de la IA

En Go, la lectura concurrente y segura de mapas no provoca pánicos ni errores. Los problemas surgen si se realiza una escritura o lectura y escritura simultáneamente. Si se lee y escribe en un mapa sin sincronización, el programa puede causar un pánico en tiempo de ejecución con el mensaje "concurrent map read and map write".

Si en el programa solo varias goroutines leen valores del mapa sin modificarlos, esto es seguro. Pero si al menos una goroutine modifica el mapa, es necesario usar mecanismos de sincronización, como sync.RWMutex o sync.Map.

Ejemplo de lectura segura usando sync.RWMutex:

var m = make(map[string]int)
var 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
}

De esta manera, la lectura concurrente sin escritura es segura, pero si hay escritura, se requiere sincronización.