class RWLock{ private: // Synchronization variables Lock lock; CV readGo; CV writeGo; // State variables int activeReaders; int activeWriters; int waitingReaders; int waitingWriters; public: RWLock(); ~RWLock() {}; void startRead(); void doneRead(); void startWrite(); void doneWrite(); private: bool readShouldWait(); bool writeShouldWait(); };