Jak czekać na dane z ReentrantReadWriteLock?
Mówi się, żeReentrantReadWriteLock
jest przeznaczony dla jednego pisarza i wielu czytelników.
Niemniej jednak, czytelnicy powinni poczekać, aż niektóre dane znajdą się w buforze.
Więc co zablokować?
Tworzyłem obiekty współbieżności, takie jak:
private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
protected final Lock readLock = rwl.readLock();
protected final Lock writeLock = rwl.writeLock();
protected final Condition hasData = writeLock.newCondition();
teraz w metodzie zapisu:
writeLock.lock();
// writing first portion and updating variables
hasData.signalAll();
// if required then writing second portion and updating variables
hasData.signalAll();
Ale jak napisać czytelnika? Czy powinien je zdobyć tylkoreadLock
? Ale jak może wtedy czekać na sygnał? Jeśli zdobędzie również awriteLock
to gdzie jest supremacja dla blokowania odczytu / zapisu?
Jak zapewnić, że wymagane zmienne nie zmienią się podczas czytania, jeśli są chronione tylko przezwriteLock
?
KOLEJKI NIE DOTYCZĄ ZADANIA
Oto pytanieReentrantReadWriteLock
.