Junior — Middle
Spiega cos'è un blocco di lettura-scrittura (RWMutex) e come viene utilizzato per gestire l'accesso ai dati.
sobes.tech AI
Risposta dell'AI
Il blocco di lettura-scrittura (RWMutex) in Go è un meccanismo di sincronizzazione che consente a più goroutine di leggere i dati contemporaneamente, garantendo un accesso esclusivo durante la scrittura.
- RLock() / RUnlock() — blocco per la lettura. Più goroutine possono mantenere questo blocco contemporaneamente.
- Lock() / Unlock() — blocco per la scrittura. Solo una goroutine può mantenerlo, e durante questo periodo non sono consentite letture.
Questo aumenta le prestazioni quando ci sono molte operazioni di lettura e poche di scrittura.
Esempio di utilizzo:
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
}
In questo esempio, più goroutine possono chiamare readData() contemporaneamente, ma se viene chiamata writeData(), essa blocca tutte le letture e scritture fino al suo completamento.