const int readers_no = 10; const int writers_no = 5 ; const int M = 3; semaphore z,x, y , rsem, wsem; semaphore delay; int readers, writers; void reader(int id) { while (1) { wait (z); wait (delay); wait (rsem); wait(x); readers++; if (readers==1) wait(wsem); signal(x); signal(rsem); signal(delay); signal(z); //////////////// CS cout <<" Reader # "<< id <<" is reading a lot of stuff that \ needs time to be readdddddd\n"; //////////////////////////////// wait (x); readers--; if (readers ==0) signal (wsem); //else if (readers < M) // signal(delay); signal(x); } } void writer(int id) { while (1) { wait(y); writers++; if (writers == 1) wait (rsem); signal(y); wait (wsem); ///////// CS cout <<"Writer # "<< id <<"\n"; ///////////// signal (wsem); wait(y); writers --; if (writers== 0) signal(rsem); signal(y); } } void main() { int i ; initialsem(x,1); initialsem(y,1); initialsem(z,1); initialsem(rsem,1); initialsem(wsem,1); initialsem(delay,M); readers = 0; writers = 0; cobegin { for (i = 1; i <=writers_no ; i ++) { reader(i); writer(i); } for( i = readers_no - writers_no +1 ; i <=readers_no ; i++) reader(i); } }