rendered paste bodyconst 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);
}
}