-
-
Save rajabishek/6209a575f00b122fe490 to your computer and use it in GitHub Desktop.
#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 the 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 writen by the writer%d is %d\n",f,data); | |
sleep(1); | |
sem_post(&writeblock); | |
} | |
int 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); | |
pthread_join(rtid[i],NULL); | |
} | |
return 0; | |
} |
Loops are used to implement multiple reader and writer.
Is it reader's priority or writer's priority??
Can you please explain with the lines of code in the writer function how it is the writers priority?
Can you please explain with the lines of code in the writer function how it is the writers priority?
sem_wait(&mutex); rcount = rcount + 1; if(rcount==1) sem_wait(&writeblock);
Inside reader you can see this piece of code, observe carefully:
rcount is 0 initially,
after statement :rcount = rcount+1;
value of rcount is 1,
If rcount is 1, It is calling sem_wait(&writeblock), this will make sure that the read block is on hold for long enough time.
Since now read block is on hold, the write block will be executed.
I hope I have answered your question.
Thank You!
How can I solve this problem using shared_mutex?
it is binary semaphore
There two pthread_create() in the for loop.
One is for reader and the other is for writer.