Thursday, 20 February 2014

Reader-Writer Problem with Multithreading

 Reader-Writer Problem with Multithreading


#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
pthread_mutex_t x,wsem; //The mutex lock
int readcount;
pthread_t tid;//ThreadID

void *reader(void *param); //The writer thread

void *writer(void *param); //The writer thread

void initialize()
 {
  pthread_mutex_init(&x,NULL); //Create the mutex lock x
  pthread_mutex_init(&wsem,NULL);//Create the mutex lock wsem
  readcount=0;
 }

/*Reader Thread */

void *reader(void *param)
 {
    int item;
    int waittime;//Next item is produced after waittime
    waittime=rand()% 5;
    printf("Reader trying to enter\n");
    pthread_mutex_lock(&x);
    readcount++;
    if(readcount==1)
           pthread_mutex_lock(&wsem);
    printf("%d readers inside\n",readcount);
    pthread_mutex_unlock(&x);
    sleep(waittime);
    pthread_mutex_lock(&x);
    readcount--;
    if(readcount==0);
        pthread_mutex_unlock(&wsem);
    pthread_mutex_unlock(&x);
    printf("Reader leaving\n");
 }  
  

/*writer thread */

void *writer(void *param)
 {

  int waittime;//Next write after waittime
  waittime=rand() % 3;
  printf("Writer is trying to enter\n");
  pthread_mutex_lock(&wsem);
  printf("Writer inside\n");
  sleep(waittime);
  pthread_mutex_unlock(&wsem);
  printf("Writer leaving\n");
 }



int main()
 {
     int n1;//No. of readers
     int n2;//No. of writers
     int i;
     printf("Enter no. of readers :\n");
         scanf("%d",&n1);

         printf("Enter no. of writers :\n");
     scanf("%d",&n2);
     initialize();
   //Create reader threads
        for(i=0;i<n1;i++)
        pthread_create(&tid,NULL,reader,NULL);
  //Create writer threads           
         for(i=0;i<n2;i++)
         pthread_create(&tid,NULL,writer,NULL);
      sleep(30);
         exit(0);
 } 

OUTPUT: 


guest-stEO95@computer-OptiPlex-745:~$ cc 1235.c -lpthread

guest-stEO95@computer-OptiPlex-745:~$ ./a.out

Enter no. of readers :

5

Enter no. of writers :

4

Reader trying to enter

Reader trying to enter

Reader trying to enter

1 readers inside

Reader trying to enter

Writer is trying to enter

2 readers inside

3 readers inside

Reader trying to enter

4 readers inside

Reader leaving

4 readers inside

Reader leaving

Writer inside

Writer is trying to enter

Writer is trying to enter

Writer is trying to enter

Reader leaving

Writer inside

Reader leaving

Writer inside

Writer leaving

Writer inside

Writer leaving

Writer leaving

Writer leaving

Reader leaving

guest-stEO95@computer-OptiPlex-745:~$


No comments:

Post a Comment