Question: Need Help with Operating System : I have the working code just need to answer the question Ques : run with one producer and one

Need Help with Operating System:I have the working code just need to answer the question

Ques: run with one producer and one consumer, and have the pro-ducer produce a few values. Start with a buffer of size 1, and then increase it. How does the behavior of the code change when the buffer is larger? (or does it?) What would you predict num full to be with different buffer sizes (e.g., -m 10) and different numbers of produced items (e.g., -l 100), when you change the consumer sleep string from default (no sleep) to -C 0,0,0,0,0,0,1?

#include

#include

#include

#include

#include

#include

#include

#include

#include "mythreads.h"

#include "pc-header.h"

pthread_cond_t cv = PTHREAD_COND_INITIALIZER;

pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;

#include "main-header.h"

void do_fill(int value) {

// ensure empty before usage

ensure(buffer[fill_ptr] == EMPTY, "error: tried to fill a non-empty buffer");

buffer[fill_ptr] = value;

fill_ptr = (fill_ptr + 1) % max;

num_full++;

}

int do_get() {

int tmp = buffer[use_ptr];

ensure(tmp != EMPTY, "error: tried to get an empty buffer");

buffer[use_ptr] = EMPTY;

use_ptr = (use_ptr + 1) % max;

num_full--;

return tmp;

}

void *producer(void *arg) {

int id = (int) arg;

// make sure each producer produces unique values

int base = id * loops;

int i;

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

Mutex_lock(&m); p1;

while (num_full == max) { p2;

Cond_wait(&cv, &m); p3;

}

do_fill(base + i); p4;

Cond_signal(&cv); p5;

Mutex_unlock(&m); p6;

}

return NULL;

}

void *consumer(void *arg) {

int id = (int) arg;

int tmp = 0;

int consumed_count = 0;

while (tmp != END_OF_STREAM) { c0;

Mutex_lock(&m); c1;

while (num_full == 0) { c2;

Cond_wait(&cv, &m); c3;

}

tmp = do_get(); c4;

Cond_signal(&cv); c5;

Mutex_unlock(&m); c6;

consumed_count++;

}

// return consumer_count-1 because END_OF_STREAM does not count

return (void *) (long long) (consumed_count - 1);

}

// must set these appropriately to use "main-common.c"

pthread_cond_t *fill_cv = &cv;

pthread_cond_t *empty_cv = &cv;

// all codes use this common base to start producers/consumers

// and all the other related stuff

#include "main-common.c"

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!