All pastes #449551 Raw Edit

Something

public c v1 · immutable
·published 2007-04-20 08:19 UTC
rendered paste body
//code from lecture slidesconst 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);	}}