//code from lecture slides const int numReaders = 10; const int numWriters = 5; const int M = 3; semaphore z, turn, mutex1, mutex2, lock; semaphore lag; int readers, writers; void reader(int x){ while(1){ wait(z); wait(lag);//added delay wait(turn); wait(mutex1); readers++; if(readers == 1){ wait(lock); } signal(mutex1); signal(turn); signal(lag);//added delay signal(z); cout <<"Reader # "<< x <<" reading\n"; wait(mutex1); readers--; if(readers==0){ signal(lock); } signal(mutex1); } } void writer(int y){ while(1){ wait(mutex2); writers++; if(writers==1){ wait(turn); } signal(mutex2); wait(lock); cout <<"Writer # "<< y <<" writing\n"; signal(lock); wait(mutex2); writers--; if (writers==0){ signal(turn); } signal(mutex2); } } void main(){ int i; initialsem(z,1); initialsem(mutex1,1); initialsem(mutex2,1); initialsem(lock,1); initialsem(turn,1); initialsem(lag,M); readers = 0; writers = 0; cobegin { for (i = 1; i <=numWriters ; i ++){ reader(i); writer(i); } for( i = numReaders - numWriters +1 ; i <=numReaders ; i++) reader(i); } }