ReadWrite monitor - version 3
ReadWrite monitor - version 3
class ReadWrite {
… // as before
private protected boolean readersturn = false;
synchronized public void acquireRead() {
while (writing || (waitingW>0 && !readersturn))
{ … wait(); … }
++readers;
}
synchronized public void releaseRead() {
--readers; readersturn=false;
if(readers==0) notifyAll();
}
synchronized public void acquireWrite() {… }
synchronized public void releaseWrite() {
writing = false; readersturn=true;
notifyAll();
}
}