Sobes.tech
Junior — Middle

Qual è la differenza tra l'uso di un mutex standard e di un mutex con capacità di lettura e scrittura (RWMutex)?

sobes.tech AI

Risposta dell'AI

Il mutex standard (sync.Mutex) in Go garantisce un accesso esclusivo a una risorsa: in ogni momento, solo una goroutine può acquisire il mutex, le altre aspettano.

Il mutex con capacità di lettura e scrittura (sync.RWMutex) permette:

  • A più goroutine di acquisire contemporaneamente il mutex per la lettura (RLock), se non c'è uno scrittore.
  • Solo una goroutine può acquisire il mutex per la scrittura (Lock), bloccando tutti i lettori e altri scrittori.

Questo aumenta le prestazioni in scenari in cui le operazioni di lettura sono molto più frequenti di quelle di scrittura, poiché le letture non si bloccano a vicenda.

Esempio:

var mu sync.RWMutex
var data int

// Lettura
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Scrittura
mu.Lock()
data = 42
mu.Unlock()

Se si utilizza un Mutex normale, anche le letture si bloccherebbero tra loro, riducendo il parallelismo.