Question: Consider the following code snippet: #define MACHINE _ CAPACITY 6 4 sem _ t mutex, slots _ filled, slots _ empty; struct machine { int

Consider the following code snippet:
#define MACHINE_CAPACITY 64
sem_t mutex, slots_filled, slots_empty;
struct machine{ int nitems; };
double _sleep_time(){ return 2*((double) rand()/(double) RAND_MAX); }
void *producer_fn(void *args){
int cokes;
struct machine *cur_machine =(struct machine *) args;
while (1){
sem_wait(&slots_empty);
sem_wait(&mutex);
cokes = cur_machine->nitems;
cur_machine->nitems +=1;
printf("[Producer] enqueue cokes %d ->%d
", cokes, cur_machine->nitems);
sem_post(&mutex);
sem_post(&slots_filled);
sleep(_sleep_time());
}
}
void *consumer_fn(void *args){
int cokes;
struct machine *cur_machine =(struct machine *) args;
while (1){
sem_wait(&slots_filled);
sem_wait(&mutex);
cokes = cur_machine->nitems;
cur_machine->nitems -=1;
printf("[Consumer] dequeue cokes %d ->%d
", cokes, cur_machine->nitems);
sem_post(&mutex);
sem_post(&slots_empty);
sleep(_sleep_time());
}
}
int main(void){
struct machine coke_machine ={.nitems =0};
srand (time(NULL));
sem_init(&mutex, 0,1);
sem_init(&slots_empty, 0, MACHINE_CAPACITY);
sem_init(&slots_filled, 0,0);
pthread_t producer, consumer;
pthread_create(&producer, NULL, producer_fn,(void *)&coke_machine);
pthread_create(&consumer, NULL, consumer_fn,(void *)&coke_machine);
pthread_join(producer, NULL);
pthread_join(consumer, NULL);
return 0; // code only reaches here if the machine is broken
}
Which of the following statements is false?
Group of answer choices
Removing slots_filled and slots_empty semaphores causes the data-race problem
In the producer_fn, swapping sem_post(&slots_filled) and sem_post(&mutex) code lines causes deadlock.
In the producer_fn, swapping sem_wait(&mutex) and sem_wait(&slots_empty) code lines can cause deadlock problem.
This code runs without data-race or deadlock problems
Removing mutex semaphore causes the data-race problem

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!