Header Ads

Reader Writer problem

The Problem Statement

There is a shared resource which should be accessed by multiple processes. There are two types of processes in this context. They are reader and writer. Any number of readers can read from the shared resource simultaneously, but only one writer can write to the shared resource. When a writer is writing data to the resource, no other process can access the resource. A writer cannot write to the resource if there are a non-zero number of readers accessing the resource at that time.



Solution:


#include< stdio.h>
#include< pthread.h>
#include< semaphore.h>
sem_t mutex,writeblock;
int data=0,rcount=0;
void *reader(void *arg)
{
        int f;
        f=((int)arg);
        sem_wait(&mutex);
        rcount=rcount+1;
        if(rcount==1)
                sem_wait(&writeblock);
                sem_post(&mutex);
                printf("Data read by reader %d is %d \n",f,data);
                sleep(1);
                sem_wait(&mutex);
                rcount=rcount-1;
                if(rcount==0)
                        sem_post(&writeblock);
                        sem_post(&mutex);
}
void *writer(void *arg)
{
        int f;
        f=((int)arg);
        sem_wait(&writeblock);
        data++;
        printf("Data written by writter %d is %d\n",f,data);
        sleep(1);
        sem_post(&writeblock);
}
main()
{
        int i,b;
        pthread_t rtid[5],wtid[5];
        sem_init(&mutex,0,1);
        sem_init(&writeblock,0,1);
        for(i=0;i<=2;i++)
        {
                pthread_create(&wtid[i],NULL,writer,(void*)i);
                pthread_create(&rtid[i],NULL,reader,(void*)i);
        }
        for(i=0;i< 2;i++)
        {
                pthread_join(wtid[i],NULL);
        }
}



Powered by Blogger.