Readers/Writers Sema Implementation
var mutex: semaphore ; controls access to readcount
wrt: semaphore ; control entry to a writer or first reader
readcount: integer ; number of readers
wait(wrt) ; any writers or readers?
<perform write operation>
signal(wrt) ; allow others
wait(mutex) ; ensure exclusion
readcount = readcount + 1 ; one more reader
if readcount = 1 then wait(wrt) ; if we’re the first, synch with writers
wait(mutex) ; ensure exclusion
readcount = readcount - 1 ; one fewer reader
if readcount = 0 then signal(wrt) ; no more readers, allow a writer