Junior — Middle
Použili ste v projektoch mechanizmus ReadWriteLock na riadenie paralelnej práce s prostriedkami?
sobes.tech AI
Odpoveď od AI
Áno, mechanizmus ReadWriteLock sa často používa na riadenie paralelného prístupu k zdrojom, keď je potrebné zvýšiť výkon rozdelením operácií čítania a zápisu.
ReadWriteLock umožňuje viacerým vláknam súčasne čítať zdroj (zámok čítania), ale blokuje prístup na zápis (zámok zápisu), ak sú aktívni čitatelia. Zápis vyžaduje exkluzívny prístup, teda blokuje aj iných pisateľov, aj čitateľov.
V Android (Java/Kotlin) sa to realizuje cez triedu ReentrantReadWriteLock z balíka java.util.concurrent.locks.
Príklad použitia v Kotlin:
val lock = ReentrantReadWriteLock()
val readLock = lock.readLock()
val writeLock = lock.writeLock()
var zdieľanýZdroj = 0
fun čítanieDát(): Int {
readLock.lock()
try {
return zdieľanýZdroj
} finally {
readLock.unlock()
}
}
fun písanieDát(hodnota: Int) {
writeLock.lock()
try {
zdieľanýZdroj = hodnota
} finally {
writeLock.unlock()
}
}
Tento prístup umožňuje zvýšiť efektivitu pri veľkom počte čitateľských operácií a zriedkavých zápisoch, vyhýbaním sa zbytočnému blokovaniu.