Junior — Middle
Czy używałeś mechanizmu ReadWriteLock w swoich projektach do zarządzania równoległą pracą z zasobami?
sobes.tech AI
Odpowiedź od AI
Tak, mechanizm ReadWriteLock jest często używany do zarządzania równoległym dostępem do zasobów, gdy konieczne jest zwiększenie wydajności poprzez rozdzielenie operacji odczytu i zapisu.
ReadWriteLock pozwala wielu wątkom jednocześnie odczytywać zasób (blokada odczytu), ale blokuje dostęp do zapisu (blokada zapisu), jeśli są aktywni czytelnicy. Zapisy wymagają wyłącznego dostępu, czyli blokują zarówno innych pisarzy, jak i czytelników.
W Androidzie (Java/Kotlin) realizuje się to za pomocą klasy ReentrantReadWriteLock z pakietu java.util.concurrent.locks.
Przykład użycia w Kotlin:
val lock = ReentrantReadWriteLock()
val readLock = lock.readLock()
val writeLock = lock.writeLock()
var zasóbWspółdzielony = 0
fun odczytDanych(): Int {
readLock.lock()
try {
return zasóbWspółdzielony
} finally {
readLock.unlock()
}
}
fun zapisDanych(wartość: Int) {
writeLock.lock()
try {
zasóbWspółdzielony = wartość
} finally {
writeLock.unlock()
}
}
Takie podejście pozwala zwiększyć efektywność przy dużej liczbie operacji odczytu i rzadkich zapisach, unikając nadmiernego blokowania.