Junior — Middle
Que técnicas de utilização de bloqueios ou outros mecanismos para evitar o acesso simultâneo aos dados conheces?
sobes.tech IA
Resposta da IA
Técnicas principais para evitar acesso simultâneo a dados em Go:
- Mutex (sync.Mutex): bloqueio da secção crítica para que apenas um thread possa trabalhar com os dados.
var mu sync.Mutex
mu.Lock()
// trabalho com dados partilhados
mu.Unlock()
-
RWMutex (sync.RWMutex): permite que múltiplos leitores leiam dados simultaneamente, mas bloqueia a escrita.
-
Canais (channels): transmissão de dados entre goroutines, evitando acesso direto aos dados partilhados.
-
Operações atómicas (sync/atomic): para operações simples com variáveis sem bloqueio completo.
-
sync.Once: para inicialização única de dados.
A escolha do mecanismo depende da tarefa: para exclusão mútua simples — Mutex, para separar leitura e escrita — RWMutex, para transmissão de mensagens — canais.