//READER WRITER WITH READER PRIORITY
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
int readcnt=0;
sem_t x,wsem;
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
int readcnt=0;
sem_t x,wsem;
void *reader(void *i)
{
int *k;
k=(int*)i;
printf("in reader %d thread\n",*k+1);
sleep(1);
sem_wait(&x);
readcnt++;
if(readcnt==1)
sem_wait(&wsem);
sem_post(&x);
printf("\nReader %d is reading\n",*k+1);
sleep(5);
sem_wait(&x);
printf("Reader %d has finished\n",*k+1);
readcnt--;
if(readcnt==0)
sem_post(&wsem);
sem_post(&x);
}
void *writer(void *j)
{
int *k;
k=(int*)j;
printf("In writer %d thread\n",*k+1);
sleep(1);
sem_wait(&wsem);
printf("\nwriter %d is writing\n",*k+1);
sleep(5);
sem_post(&wsem);
printf("\nwriter %d has finished\n",*k+1);
}
int main()
{
pthread_t t1,t2,t3,t4,t5;
int i=0,j=1,k=2,ch;
sem_init(&x,0,1);
sem_init(&wsem,0,1);
pthread_create(&t1,NULL,writer,&i);
pthread_create(&t2,NULL,reader,&i);
pthread_create(&t3,NULL,writer,&j);
pthread_create(&t4,NULL,reader,&j);
pthread_create(&t5,NULL,reader,&k);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_join(t3,NULL);
pthread_join(t4,NULL);
pthread_join(t5,NULL);
return(0);
}
No comments:
Post a Comment