Friday, December 3, 2010

Producer Consumer Problem (bounded) - Semaphores

Bounded by N buffers;
Solution:
semaphore full =0
semaphore empty = N
semaphore mutex = 1
producer() {
  while(true) {
    produce()
    empty.wait() //move one item from empty list taken to produce
    mutex.wait() //lock
    append()
    mutex.signal() //release lock
    full.signal() // fill the full with one more item ready for consume
  }
}
consumer() {
   while(true) {
    full.wait() // wait for fill to be filled by producer
     mutex.wait() //lock it and take away
     take()
    mutex.signal() //release lock
    empty.signal() // one more item got empty from the buffer
     consume()
  }
}

No comments:

Post a Comment