Saturday 15 September 2012

c - Result of algorithm in reverse, Producer-Consumer solution using Semaphores -



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