int readcount = 0; semaphore wsem = 1; // semaphore x = 1; // void reader(){ while(1){ wait(x); readcount++; if (readcount==1) wait(wsem); signal(x); doReading(); wait(x); readcount--; if (readcount==0) signal(wsem); signal(x); } } void writer(){ while(1){ wait(wsem); doWriting(); signal(wsem); } }