Ответ
Да, работал. ReadWriteLock полезен, когда есть частые операции чтения и редкие — записи. Он позволяет нескольким потокам читать данные одновременно, но блокирует всех читателей и писателей при записи.
Пример:
val lock = ReentrantReadWriteLock()
fun readData() {
lock.readLock().lock()
try {
// чтение данных
} finally {
lock.readLock().unlock()
}
}
fun writeData() {
lock.writeLock().lock()
try {
// запись данных
} finally {
lock.writeLock().unlock()
}
}
Нюансы:
- Может привести к голоданию писателей, если чтение происходит постоянно.
- Не поддерживает обновление блокировки (read → write без отпускания).
- Альтернатива —
StampedLockс оптимистичным чтением.