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