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