Sobes.tech
Junior — Middle

Kas olete kasutanud oma projektides ReadWriteLock-mehhanismi ressurssidega paralleelsete tööde juhtimiseks?

sobes.tech AI

Vastus AI-lt

Jah, ReadWriteLock mehhanismit kasutatakse sageli ressurssidele paralleelse juurdepääsu haldamiseks, kui on vaja parandada jõudlust, eraldades lugemis- ja kirjutamisoperatsioonid.

ReadWriteLock võimaldab mitmel niidil samaaegselt ressurssi lugeda (lugemislukk), kuid blokeerib juurdepääsu kirjutamiseks (kirjutuslukk), kui on aktiivseid lugejaid. Kirjutamine nõuab eksklusiivset juurdepääsu, see tähendab, et see blokeerib teisi kirjutajaid ja lugejaid.

Androidis (Java/Kotlin) realiseeritakse see klassi ReentrantReadWriteLock kaudu paketist java.util.concurrent.locks.

Kotlin näide:

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

fun loeAndmed(): Int {
    readLock.lock()
    try {
        return jagatudResurss
    } finally {
        readLock.unlock()
    }
}

fun kirjutaAndmed(väärtus: Int) {
    writeLock.lock()
    try {
        jagatudResurss = väärtus
    } finally {
        writeLock.unlock()
    }
}

See lähenemine võimaldab suurendada tõhusust suure lugemisoperatsioonide arvu ja harva kirjutamise korral, vältides liigset blokeerimist.