Sobes.tech
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.