Sobes.tech
Junior — Middle

Používali jste ve svých projektech mechanismus ReadWriteLock pro řízení paralelní práce s prostředky?

sobes.tech AI

Odpověď od AI

Ano, mechanismus ReadWriteLock se často používá k řízení paralelního přístupu ke zdrojům, když je třeba zvýšit výkon oddělením operací čtení a zápisu.

ReadWriteLock umožňuje více vláknům současně číst zdroj (zámek čtení), ale blokuje přístup k zápisu (zámek zápisu), pokud jsou aktivní čtenáři. Zápis vyžaduje exkluzivní přístup, tj. blokuje ostatní zapisovatele i čtenáře.

V Androidu (Java/Kotlin) je to implementováno přes třídu ReentrantReadWriteLock z balíčku java.util.concurrent.locks.

Příklad použití v Kotlin:

val lock = ReentrantReadWriteLock()
val readLock = lock.readLock()
val writeLock = lock.writeLock()
var sdílenýZdroj = 0

fun čístData(): Int {
    readLock.lock()
    try {
        return sdílenýZdroj
    } finally {
        readLock.unlock()
    }
}

fun psátData(hodnota: Int) {
    writeLock.lock()
    try {
        sdílenýZdroj = hodnota
    } finally {
        writeLock.unlock()
    }
}

Tento přístup umožňuje zvýšit efektivitu při velkém počtu čtecích operací a vzácných zápisech, vyhýbá se zbytečnému blokování.