c - Result of algorithm in reverse, Producer-Consumer solution using Semaphores -
the producer-consumer problem solved using semaphore algorithm semaphore decremented buffer size semaphore decremented 1 signifying critical section.
if these operations happening consecutively back-to-back why not right decrement 1 (the mutex) , decrement buffer size?
i know both producer , consumer go sleep @ same time creating deadlock why minor switch cause entire algorithm fail?
buffersize = 3; semaphore mutex = 1; // controls access critical section semaphore empty = buffersize; // counts number of empty buffer slots semaphore total = 0; // counts number of total buffer slots producer() { int widget; while (true) { // loop forever make_new(widget); // create new widget set in buffer down(&empty); // decrement empty semaphore down(&mutex); // come in critical section put_item(widget); // set widget in buffer up(&mutex); // leave critical section up(&full); // increment total semaphore } } consumer() { int widget; while (true) { // loop forever down(&full); // decrement total semaphore down(&mutex); // come in critical section remove_item(widget); // take widget buffer up(&mutex); // leave critical section up(&empty); // increment empty semaphore consume_item(widget); // consume item } }
code source: resource
its not right because if producer enters code section wait(mutex) finds out there no empty blocks left has wait on empty semaphore. @ same time when consumer tries come in has wait on mutex producer has locked mutex. there deadlock producer waiting consumer consume , consumer waiting producer signal(mutex) not case original arrangement of mutex , semaphores producer or consumer allowed wait on mutex when has decremented semaphore value. hence no deadlock.
c algorithm semaphore
No comments:
Post a Comment