1. Here are the codes for producer and consumer problems Producer: while (true)
ID: 3861450 • Letter: 1
Question
1. Here are the codes for producer and consumer problems
Producer:
while (true) {
/* produce an item in next produced */
while (counter == BUFFER_SIZE) ;
/* do nothing */
buffer[in] = next_produced;
in = (in + 1) % BUFFER_SIZE;
counter++;
}
Consumer:
while (true) {
while (counter == 0)
; /* do nothing */
next_consumed = buffer[out];
out = (out + 1) % BUFFER_SIZE; counter--;
/* consume the item in next consumed */
}
counter++ could be implemented by Producer as
register1 = counter
register1 = register1 + 1
counter = register1
counter-- could be implemented by Consumer as
register2 = counter
register2 = register2 - 1
counter = register2
If we set the current value of “counter “ as 7, when Producer and Consumer concurrently execute one time, what are the possible values of ‘’counter”, please give an example for each values.
Answer:
Explanation / Answer
There can be many cases (around 17), below given three cases will explain what are the possible values of counter and how are they feasible.
case 1:
register1 = counter = 7 //producer
register1 = 8 //producer
counter = register1 = 8 //producer
register2 = counter = 8 //consumer
register2 = 7 //consumer
counter = register2 = 7 //consumer
case 2:
register1 = counter = 7 //producer
register1 = 8 //producer
register2 = counter = 7 //consumer
counter = register1 = 8 //producer
register2 = 6 //consumer
counter = register2 = 6 //consumer
Case 3:
register1 = counter = 7 //producer
register1 = 8 //producer
register2 = counter = 7 //consumer
register2 = 6 //consumer
counter = register2 = 6 //consumer
counter = register1 = 8 //producer
BOLD AND UNDERLINED values are final value for counter
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.