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í.