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

I have a producer & consumer C program .. I am supposed to use threads and metap

ID: 3798227 • Letter: I

Question

I have a producer & consumer C program .. I am supposed to use threads and metaphores(not Mutex) is in Unix : i have 3 arrays a: 0-19   b: 1-20   C : [20] elements all initilized to zero ..

i'm supposed to create 3 threads 2 producers and 1 consumer ! the producer reads the value of a & b and sums them in C and updates global sum variable .

this is supposed to be the output :

Output from a sample run can be Producer 1 has written c[0] and updated global sun. Nunber of itens available for consuner: 1. Producer 2 has written c[1] and updated global sun. Number of itens available for consumer: 2. Consuner 1 has read c[0] 1 Consumer 1 has read global summ4 Nunber of itens available for consumer 1 Producer has written c[21 and updated guobau sun. Number of itens available for consumer: 2. Consumer 1 has read c 1] 3 Consuner 1 has read global suna9 Nunber of itens available for consuner: 1. Producer 1 has written c[3] and updated global sun. Nunber of itens available for consuner: 2. Consuner 1 has read c[2] 5 Consuner 1 has read global sun 16 Number of items avatlable for consumer 1.

Explanation / Answer

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int sum =0;
pthread_mutex_t queue_lock;
int produced;
int c[20] = {0};

int main(int argc, char* argv[])
{
int a[20];
int b[21];
  
pthread_t P1,P2, C;
  
pthread_create(&P1,NULL,Produce,&a);
  
pthread_create(&P2,NULL,Produce,&b);

pthread_create(&C,NULL,Consume,&c);

}

Produce(void* args)
{int in = 0;
int produce =1;
  
pthread_mutex_lock(&queue_lock);
  
  
printf("Producer%d has written c[%d] and updated global sum",produce,in);
printf("Number of items available for consumer :%d",produce);
in++;
produce++;
sum+=sum;

pthread_mutex_unlock(&queue_lock);

}


Consume()
{
int out =0;
int consume = 1;

printf("Consumer %d has read c[%d]=%d",consume,out,consume);
printf("Consumer %d has read global sum %d",consume,sum);
printf("Number of items available for consumer:%d",consume);


}