Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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