Junior — Middle
Ar naudojote ReadWriteLock mechanizmą savo projektuose, kad valdytumėte lygiagrečią darbą su ištekliais?
sobes.tech AI
Atsakymas iš AI
Taip, ReadWriteLock mechanizmas dažnai naudojamas valdyti paralelų prieigą prie išteklių, kai reikia pagerinti našumą atskiriant skaitymo ir rašymo operacijas.
ReadWriteLock leidžia keliems srautams vienu metu skaityti išteklių (skaitymo užraktas), bet blokuoja prieigą rašymui (rašymo užraktas), jei yra aktyvių skaitytojų. Rašymas reikalauja išskirtinio prieigos, tai yra, blokuoja kitus rašytojus ir skaitytojus.
Android'e (Java/Kotlin) tai įgyvendinama per klasę ReentrantReadWriteLock iš paketo java.util.concurrent.locks.
Kotlin pavyzdys:
val lock = ReentrantReadWriteLock()
val readLock = lock.readLock()
val writeLock = lock.writeLock()
var bendrasIšteklis = 0
fun skaitytiDuomenis(): Int {
readLock.lock()
try {
return bendrasIšteklis
} finally {
readLock.unlock()
}
}
fun rašytiDuomenis(reikšmė: Int) {
writeLock.lock()
try {
bendrasIšteklis = reikšmė
} finally {
writeLock.unlock()
}
}
Šis požiūris leidžia padidinti efektyvumą, kai yra daug skaitymo operacijų ir retai rašymo operacijų, išvengiant nereikalingo užrakinimo.