#include<iostream> #include<pthread.h> #include<semaphore.h> #include <string.h>
ID: 3852312 • Letter: #
Question
#include<iostream>
#include<pthread.h>
#include<semaphore.h>
#include <string.h>
using namespace std;
sem_t readAccess;
sem_t writeAccess;
int readCount=0;
char buffer[50];
void * Reader(void *arg)
{
sem_wait(&readAccess);
readCount++;
if(readCount==1)
sem_wait(&writeAccess);
sem_post(&readAccess);
cout<<"Inside reader Buffer value is "<<buffer;
cout<<endl;
sem_wait(&readAccess);
readCount--;
if(readCount==0)
sem_post(&writeAccess);
sem_post(&readAccess);
}
void * Writer(void *arg)
{
int writerNo=*(int*)arg;
sem_wait(&writeAccess);
cout<<endl;
cout<<"writer number"<<writerNo<<endl;
cout<<"Before Inside writer Buffer value is "<<buffer<<endl;
strcpy(buffer,"test data written to buffer");
cout<<"After Inside writer Buffer value is "<<buffer<<endl;
sem_post(&writeAccess);
}
int main()
{
pthread_t readers[4];
pthread_t writers[3];
strcpy(buffer,"Not used so far");
sem_init(&readAccess,0,1);
sem_init(&writeAccess,0,1);
for(int i=0; i<4;i++)
{
pthread_create(&readers[i],NULL,Reader,(void *)&i);
}
for(int i=0; i<3;i++)
{
pthread_create(&writers[i],NULL,Writer,(void*)&i);
}
for(int i=0; i<4;i++)
{
pthread_join(readers[i],0);
}
for(int i=0; i<3;i++)
{
pthread_join(writers[i],0);
}
sem_destroy (&readAccess);
sem_destroy (&writeAccess);
return 0;
}
picture of output please , cant seem to find it.
Explanation / Answer
//output
Inside reader Buffer value is Not used so far
Inside reader Buffer value is Not used so far
Inside reader Buffer value is Not used so far
Inside reader Buffer value is Not used so far
writer number1
Before Inside writer Buffer value is Not used so far
After Inside writer Buffer value is test data written to buffer
writer number3
Before Inside writer Buffer value is test data written to buffer
After Inside writer Buffer value is test data written to buffer
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.