Monday, 21 October 2013

Reader-writer

#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>

#define sz 5

sem_t wrt,read;
int readcount=0;

void * writer(void * arg);
void * reader(void * arg);
void main()
{
   pthread_t t1[6];
   int j,i,r[]={1,2,3,4,1,2};

   sem_init(&wrt,0,1);
   sem_init(&read,0,1);
   for(j=0;j<4;j++)
      pthread_create(&t1[j],NULL,reader,(void *)&r[j]);
   for(j=4;j<6;j++)
      pthread_create(&t1[j],NULL,writer,(void *)&r[j]);
   for(j=0;j<6;j++)
      pthread_join(t1[j],NULL);

  
}
void * writer(void * arg)
{
  
   int i=*(int*)arg;
   while(1)
   {
      printf("\nWriter %d Waiting",i);
      sem_wait(&wrt);
      printf("\nWriter %d writing",i);
      sleep(3);
      printf("\nWriter %d Finished",i);
      sem_post(&wrt);
      sleep(3);
   }
}
void * reader(void * arg)
{
   int i=*(int*)arg;
 
   while(1)
   {
      printf("\nReader %d is Waiting",i);
      sem_wait(&read);
      readcount++;
      if(readcount==1)
         sem_wait(&wrt);
      sem_post(&read);
      printf("\nReader %d is Reading",i);
      sleep(2);
      sem_wait(&read);
      readcount--;
      printf("\nReader %d is Finished",i);
      if(readcount==0)
      {
         sem_post(&wrt);
      }
      sem_post(&read);
      sleep(4);
   }
}

No comments:

Post a Comment