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.