Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

#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