TE Comp Sem-II SPOS Prac 8 (Reader Writer - reader priority)

//READER WRITER WITH READER PRIORITY

#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