Sobes.tech
Junior — Middle

Como garantir o acesso seguro ao cartão num ambiente multithread?

sobes.tech IA

Resposta da IA

Em Go, para aceder de forma segura a um mapa (map) num ambiente multithread, é necessário usar sincronização, pois map não é uma estrutura de dados segura para múltiplos threads. A forma mais comum é usar um mutex (sync.Mutex ou sync.RWMutex) para bloquear o acesso durante leitura e escrita.

Exemplo usando sync.RWMutex:

import (
    "sync"
)

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

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

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

Também em Go existe o tipo sync.Map, que implementa um mapa seguro para múltiplos threads com otimizações para operações frequentes de leitura. Pode ser usado se não for necessária uma tipificação rigorosa e se desejar simplicidade:

import "sync"

var m sync.Map

m.Store("key", 42)          // escrita
value, ok := m.Load("key")  // leitura

Assim, para acesso seguro a um map em um ambiente multithread, use mutexes ou sync.Map.