それはReentrantReadWriteLock
一人の作家と複数の読者を対象としていると言われています。
それでも、リーダーは、バッファーにデータが存在するまで待つ必要があります。
だから、何をロックするのですか?
次のような同時実行オブジェクトを作成しました。
private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
protected final Lock readLock = rwl.readLock();
protected final Lock writeLock = rwl.writeLock();
protected final Condition hasData = writeLock.newCondition();
今書き込みメソッドで私はします:
writeLock.lock();
// writing first portion and updating variables
hasData.signalAll();
// if required then writing second portion and updating variables
hasData.signalAll();
しかし、リーダーを書く方法は?取得するだけでreadLock
いいですか?しかし、それではどのようにして信号を待つことができるのでしょうか?それがまた取得する場合、writeLock
読み取り/書き込みロックの優位性はどこにありますか?
必要な変数がによってのみ保護されている場合、読み取り中に必要な変数が変更されないようにするにはどうすればよいwriteLock
ですか?
キューはタスクに一致しません
これはについての質問ですReentrantReadWriteLock
。