多くのチュートリアルでは、再入可能でないReadWriteLockの実装より下に来ました。ReadWriteLocks-読み込みロックを取得するために複数のリーダーをサポートする方法
public class ReadWriteLock{
private int readers = 0;
private int writers = 0;
private int writeRequests = 0;
public synchronized void lockRead() throws InterruptedException{
while(writers > 0 || writeRequests > 0){
wait();
}
readers++;
}
public synchronized void unlockRead(){
readers--;
notifyAll();
}
public synchronized void lockWrite() throws InterruptedException{
writeRequests++;
while(readers > 0 || writers > 0){
wait();
}
writeRequests--;
writers++;
}
public synchronized void unlockWrite() throws InterruptedException{
writers--;
notifyAll();
}
}
質問:
このクラスのオブジェクトは(lock
を言う)の同期のためにすべてのリーダライタスレッド間で共有されています。
リーダーT1がlock.lockRead()
を呼び出し、これがロックオブジェクトのロックを取得し、同時にリーダーT2が同じオブジェクトのlockRead()
を呼び出したとします。しかし、T1はすでにオブジェクトをロックしているため、T2はブロックされ、キュー内で待機する必要があります。
コードでは、複数の読者が同時にreadLockをどのように設定できるのですか?
私がこれを間違えたときに私に教えてください。
ありがとうございました – Pintu