Sobes.tech
Junior — Middle

Hai utilizzato il meccanismo ReadWriteLock nei tuoi progetti per gestire il lavoro parallelo con le risorse?

sobes.tech AI

Risposta dell'AI

Sì, il meccanismo ReadWriteLock viene spesso utilizzato per gestire l'accesso parallelo alle risorse, quando si desidera migliorare le prestazioni separando le operazioni di lettura e scrittura.

ReadWriteLock consente a più thread di leggere contemporaneamente la risorsa (lock di lettura), ma blocca l'accesso alla scrittura (lock di scrittura) se ci sono lettori attivi. La scrittura richiede un accesso esclusivo, cioè blocca sia altri scrittori che lettori.

In Android (Java/Kotlin), questo viene implementato tramite la classe ReentrantReadWriteLock del pacchetto java.util.concurrent.locks.

Esempio di utilizzo in Kotlin:

val lock = ReentrantReadWriteLock()
val readLock = lock.readLock()
val writeLock = lock.writeLock()
var risorsaCondivisa = 0

fun leggiDati(): Int {
    readLock.lock()
    try {
        return risorsaCondivisa
    } finally {
        readLock.unlock()
    }
}

fun scriviDati(valore: Int) {
    writeLock.lock()
    try {
        risorsaCondivisa = valore
    } finally {
        writeLock.unlock()
    }
}

Questo approccio permette di migliorare l'efficienza in presenza di molte operazioni di lettura e poche di scrittura, evitando blocchi eccessivi.