Question: #include #include #include #include / / Milk and cheese buffer sizes #define MILK _ BUFFER _ SIZE 9 #define CHEESE _ BUFFER _ SIZE 4
#include
#include
#include
#include
Milk and cheese buffer sizes
#define MILKBUFFERSIZE
#define CHEESEBUFFERSIZE
Milk and cheese buffer initialization from zero
int milkbufferMILKBUFFERSIZE;
int cheesebufferCHEESEBUFFERSIZE;
Semaphores and mutexes
semt milksem;
semt cheesesem;
pthreadmutext milkmutex;
pthreadmutext cheesemutex;
int numberofburgers;
Milk producer thread function
void milkproducervoid arg
int id intarg; Producer ID
int produced ;
while produced MILKBUFFERSIZE
semwait&milksem; Wait for available space in the buffer
pthreadmutexlock&milkmutex;
Find an empty slot in the buffer to produce buffer
for int i ; i MILKBUFFERSIZE; i
if milkbufferi
milkbufferi id; Fill the space with producer ID
printfMilk producer d produced at position d
id i;
produced;
break;
pthreadmutexunlock&milkmutex;
sempost&milksem; Signal that a milk bottle has been produced
return NULL;
Cheese producer thread function
void cheeseproducervoid arg
int id intarg;
int produced ;
whileproduced CHEESEBUFFERSIZE
pthreadmutexlock&cheesemutex;
Count and track available milk bottles
int milkids;
int milkindex ;
Fetch three milk bottles
for int i ; i MILKBUFFERSIZE && milkindex ; i
if milkbufferi
milkidsmilkindex milkbufferi;
milkbufferi; Consume the milk bottle
if milkindex
int cheeseid milkids milkids milkids id;
printfCheese producer d produced cheese d
id cheeseid;
Add the cheese slice to the cheese buffer
for int j ; j CHEESEBUFFERSIZE; j
if cheesebufferj
cheesebufferj cheeseid;
break;
pthreadmutexunlock&cheesemutex;
sempost&cheesesem; signal that a cheese slice has been produced
return NULL;
Cheeseburger producer thread function
void cheeseburgerproducervoid arg
int numburgers intarg; Number of cheeseburgers to produce
for int i ; i numburgers; i
semwait&cheesesem;
pthreadmutexlock&cheesemutex;
int cheesecount ;
int cheeseids;
for int j ; j CHEESEBUFFERSIZE; j
if cheesebufferj cheesecount;
Find available cheese slices
for int j ; j CHEESEBUFFERSIZE && cheesecount ; j
if cheesebufferj
cheeseidscheesecount cheesebufferj;
cheesebufferj; Consume cheese slice
if cheesecount
printf
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
