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.