Google Answers Logo
View Question
 
Q: soucre code for bounded buffer problem ( No Answer,   1 Comment )
Question  
Subject: soucre code for bounded buffer problem
Category: Computers > Programming
Asked by: sapota-ga
List Price: $10.00
Posted: 02 Apr 2004 20:46 PST
Expires: 05 Apr 2004 21:41 PDT
Question ID: 324380
The laboratory exercise is explained on pages 326-334 of your
textbook(Operating systems A modern perspective by GAry nutt)The
exercise requires you to create producer and consumer threads that
write into and read from a group of N buffers in linux environment.I
want the soure code for the exercise above.
Answer  
There is no answer at this time.

Comments  
Subject: Re: soucre code for bounded buffer problem
From: kevinva-ga on 03 Apr 2004 09:39 PST
 
well here is something similiar, but its in Java.
class BufferItem {
   public volatile double value = 0;          // multiple threads access
   public volatile boolean occupied = false;  // so make these `volatile'
}

class BoundedBuffer {  // designed for a single producer thread and
                       // a single consumer thread
   private int numSlots = 0;
   private BufferItem[] buffer = null;
   private int putIn = 0, takeOut = 0;
//   private int count = 0;

   public BoundedBuffer(int numSlots) {
      if (numSlots <= 0) throw new IllegalArgumentException("numSlots<=0");
      this.numSlots = numSlots;
      buffer = new BufferItem[numSlots];
      for (int i = 0; i < numSlots; i++) buffer[i] = new BufferItem();
   }

   public void deposit(double value) {
      while (buffer[putIn].occupied) // busy wait
         Thread.currentThread().yield();
      buffer[putIn].value = value;                              // A
      buffer[putIn].occupied = true;                            // B
      putIn = (putIn + 1) % numSlots;
//      count++;                                       // race condition!!!
   }

   public double fetch() {
      double value;
      while (!buffer[takeOut].occupied) // busy wait
         Thread.currentThread().yield();
      value = buffer[takeOut].value;                            // C
      buffer[takeOut].occupied = false;                         // D
      takeOut = (takeOut + 1) % numSlots;
//      count--;                                       // race condition!!!
      return value;
   }
}

/* ............... Example compile and run(s)

D:\>javac bwbb.java bbpc.java

D:\>java ProducerConsumer -s6 -p2 -c2 -R10
ProducerConsumer: numSlots=6, pNap=2, cNap=2, runTime=10
All threads started
age=50, PRODUCER napping for 997 ms
age=110, Consumer napping for 1863 ms
age=1150, PRODUCER produced item 0.196652
PRODUCER deposited item 0.196652
age=1150, PRODUCER napping for 1091 ms
age=2030, Consumer wants to consume
Consumer fetched item 0.196652
age=2030, Consumer napping for 439 ms
age=2250, PRODUCER produced item 0.268426
PRODUCER deposited item 0.268426
age=2250, PRODUCER napping for 362 ms
age=2470, Consumer wants to consume
Consumer fetched item 0.268426
age=2470, Consumer napping for 946 ms
age=2630, PRODUCER produced item 0.958945
PRODUCER deposited item 0.958945
age=2630, PRODUCER napping for 1939 ms
age=3400, Consumer wants to consume
Consumer fetched item 0.958945
age=3400, Consumer napping for 1312 ms
age=4610, PRODUCER produced item 0.078194
PRODUCER deposited item 0.078194
age=4610, PRODUCER napping for 619 ms
age=4720, Consumer wants to consume
Consumer fetched item 0.078194
age=4720, Consumer napping for 576 ms
age=5220, PRODUCER produced item 0.0630488
PRODUCER deposited item 0.0630488
age=5220, PRODUCER napping for 934 ms
age=5320, Consumer wants to consume
Consumer fetched item 0.0630488
age=5320, Consumer napping for 1993 ms
age=6150, PRODUCER produced item 0.580876
PRODUCER deposited item 0.580876
age=6150, PRODUCER napping for 851 ms
age=7030, PRODUCER produced item 0.974548
PRODUCER deposited item 0.974548
age=7030, PRODUCER napping for 1729 ms
age=7300, Consumer wants to consume
Consumer fetched item 0.580876
age=7300, Consumer napping for 496 ms
age=7850, Consumer wants to consume
Consumer fetched item 0.974548
age=7850, Consumer napping for 1480 ms
age=8730, PRODUCER produced item 0.0263791
PRODUCER deposited item 0.0263791
age=8730, PRODUCER napping for 1249 ms
age=9330, Consumer wants to consume
Consumer fetched item 0.0263791
age=9330, Consumer napping for 1890 ms
age=9990, PRODUCER produced item 0.948153
PRODUCER deposited item 0.948153
age=9990, PRODUCER napping for 1377 ms
age()=10050, time to stop the threads and exit

Important Disclaimer: Answers and comments provided on Google Answers are general information, and are not intended to substitute for informed professional medical, psychiatric, psychological, tax, legal, investment, accounting, or other professional advice. Google does not endorse, and expressly disclaims liability for any product, manufacturer, distributor, service or service provider mentioned or any opinion expressed in answers or comments. Please read carefully the Google Answers Terms of Service.

If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you.
Search Google Answers for
Google Answers  


Google Home - Answers FAQ - Terms of Service - Privacy Policy