logo

Crowdly

After working through multiple incorrect solutions to the single-buffer-slot pro...

✅ The verified answer to this question is available below. Our community-reviewed solutions help you understand the material better.

After working through multiple incorrect solutions to the single-buffer-slot producer/consumer problem, we have finally settled on the following code with some key new insights including: using condition variables to signal when the buffer is filled and when it has been emptied, and using a while loop instead of an if statement when checking if there is something in the buffer (i.e., the value of count).

int loops;

cond_t cond;

mutex_t mutex;

void *producer(void *arg) {

int i;

for (i = 0; i < loops; i++) {

Pthread_mutex_lock(&mutex);

while (count == 1)

Pthread_cond_wait(&cond, &mutex);

put(i);

Pthread_cond_signal(&cond);

Pthread_mutex_unlock(&mutex);

}

}

void *consumer(void *arg) {

int i;

for (i = 0; i < loops; i++) {

Pthread_mutex_lock(&mutex);

while (count < 2)

Pthread_cond_wait(&cond, &mutex);

int tmp = get();

Pthread_cond_signal(&cond);

Pthread_mutex_unlock(&mutex);

printf("%d\n", tmp);

}

}

Which of the following is true about our code?

More questions like this

Want instant access to all verified answers on moodle31.upei.ca?

Get Unlimited Answers To Exam Questions - Install Crowdly Extension Now!