Question
Solve the Consumer/Producer problem using semaphores. A skeleton program (Save it as producer_consumer.c) is provided to you: The main function creates 2 threads: consumer represents
Solve the Consumer/Producer problem using semaphores. A skeleton program (Save it as producer_consumer.c) is provided to you: The main function creates 2 threads: consumer represents the consumer and executes the consume function, and producer represents the producer and executes the produce function. You should declare and initialize 3 semaphores. Those semaphores should be used in the consume(..) and produce(...) functions.
#include #include #include #define BUFFER_SIZE 10 int buffer[BUFFER_SIZE]; int in, out; int num; void *produce( void *ptr ) { int item; while(1){ usleep(rand() % 1000); //sleep printf("Producer wants to produce. "); //critical section below item = rand() % 10; num++; buffer[in] = item; in = (in + 1) % BUFFER_SIZE; //critical section above printf("Producer entered %d. Buffer Size = %d ", item, num); } }
void *consume( void *ptr ) { int item; while(1){ usleep(rand() % 1000); //sleep printf("Consumer wants to consume. "); //critical section below num--; int item = buffer[out]; out = (out + 1) % BUFFER_SIZE; //critical section above printf("Consumer consumed %d. Buffer Size = %d ", item, num); } }
int main() { pthread_t consumer, producer; out = 0; //index of the item to be consumed next in = 0; //index of the item to be produced next num = 0; //number of items in the buffer srand(time(NULL)); pthread_create( &consumer, NULL, consume, NULL); pthread_create( &producer, NULL, produce, NULL); pthread_join( producer, NULL); pthread_join( consumer, NULL); pthread_exit(NULL); } |
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started