Junior — Middle
Explique o que é um bloqueio de leitura-escrita (RWMutex) e como é utilizado para gerir o acesso aos dados?
sobes.tech IA
Resposta da IA
O bloqueio de leitura-escrita (RWMutex) em Go é um mecanismo de sincronização que permite a várias goroutines lerem dados simultaneamente, garantindo acesso exclusivo durante a escrita.
- RLock() / RUnlock() — bloqueio para leitura. Várias goroutines podem manter esse bloqueio ao mesmo tempo.
- Lock() / Unlock() — bloqueio para escrita. Apenas uma goroutine pode mantê-lo, e nenhuma leitura é permitida durante esse período.
Isso aumenta o desempenho quando há muitas operações de leitura e poucas de escrita.
Exemplo de uso:
var rwMutex sync.RWMutex
var data int
func readData() int {
rwMutex.RLock()
defer rwMutex.RUnlock()
return data
}
func writeData(val int) {
rwMutex.Lock()
defer rwMutex.Unlock()
data = val
}
Neste exemplo, várias goroutines podem chamar readData() simultaneamente, mas se writeData() for chamada, ela bloqueia todas as leituras e escritas até que termine.