Junior — Middle
Qual é a diferença entre o uso de um mutex padrão e um mutex com capacidade de leitura e escrita (RWMutex)?
sobes.tech IA
Resposta da IA
O mutex padrão (sync.Mutex) em Go fornece acesso exclusivo a um recurso: em cada momento, apenas uma goroutine pode adquirir o mutex, as demais aguardam.
O mutex com capacidade de leitura e escrita (sync.RWMutex) permite:
- Várias goroutines podem adquirir simultaneamente o mutex para leitura (RLock), se não houver um escritor.
- Apenas uma goroutine pode adquirir o mutex para escrita (Lock), bloqueando todos os leitores e outros escritores.
Isto aumenta o desempenho em cenários onde as operações de leitura são muito mais frequentes do que as de escrita, pois as leituras não bloqueiam entre si.
Exemplo:
var mu sync.RWMutex
var data int
// Leitura
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// Escrita
mu.Lock()
data = 42
mu.Unlock()
Se usar um Mutex normal, até as leituras bloqueiam entre si, o que reduz o paralelismo.