Sobes.tech
Junior — Middle

¿Cómo garantizar un acceso seguro a la tarjeta en un entorno multihilo?

sobes.tech AI

Respuesta de la IA

En Go, para acceder de manera segura a un mapa (map) en un entorno multihilo, es necesario utilizar sincronización, ya que map no es una estructura de datos segura para múltiples hilos. La forma más común es usar un mutex (sync.Mutex o sync.RWMutex) para bloquear el acceso durante la lectura y escritura.

Ejemplo usando sync.RWMutex:

import (
    "sync"
)

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

func read(key string) int {
    mu.RLock()         // bloquea para lectura
    defer mu.RUnlock()
    return m[key]
}

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

También en Go existe el tipo sync.Map, que implementa un mapa seguro para múltiples hilos con optimizaciones para operaciones frecuentes de lectura. Se puede usar si no se necesita una tipificación estricta y se busca simplicidad:

import "sync"

var m sync.Map

m.Store("key", 42)          // escritura
value, ok := m.Load("key")  // lectura

Por lo tanto, para acceder de forma segura a un map en un entorno multihilo, use mutexes o sync.Map.