class ReaderWriter { int numReaders = 0; BinarySemaphore mutex = new BinarySemaphore(true); BinarySemaphore wlock = new BinarySemaphore(true); public void startRead() { mutex.P(); numReaders++; if (numReaders == 1) wlock.P(); mutex.V(); } public void endRead() { mutex.P(); numReaders--; if (numReaders == 0) wlock.V(); mutex.V(); } public void startWrite() { wlock.P(); } public void endWrite() { wlock.V(); } }