currentReaders = 0; writersExecuting = 0; void ReadersThread () { beginCriticalSection (1); while (writersExecuting > 0) { endCriticalSection (1); sleep; beginCriticalSection (1); } currentReaders ++; endCriticalSection (1); /* reading */ beginCriticalSection (1); currentReaders --; endCriticalSection (1); wakeup; } void WritersThread () { beginCriticalSection (1); while ((writersExecuting > 0) || (currentReaders > 0)) { endCriticalSection (1); sleep; beginCriticalSection (1); } writersExecuting ++; endCriticalSection (1); /* writing */ beginCriticalSection(1); writersExecuting --; endCriticalSection(1); wakeup; }