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.

questionAnswers(3)

yourAnswerToTheQuestion