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