Producer-Consumer Problem Using Semaphores

Q1. Solving the Producer-Consumer Problem Using Semaphores.

Ans.

#define N 100                      /*number of slots in the buffer*/

typedef int semaphore;       /*semaphore are a special kind of integer*/

semaphore mutex=1;          /*controls access to critical region*/

semaphore empty=N          /*counts empty buffer slots*/

semaphore full=0;               /*counts full buffer slots*/

 

void producer(void)

{

int item;

 

while(TRUE)                         /*TRUE is the constant 1*/

{

item=produce_item();          /*generate something to put in buffer*/

down(&empty)                     /*decrement empty count*/

down(&mutex);                    /*enter critical region */

insert_item(item);                /*put new item in buffer*/

up(&mutex);                         /*leave critical region*/

up(&full);                              /*increment count of full slots*/

}

}

 

void consumer(void)

{

int item;

while(TRUE)                          /*infinite loop*/

{

down(&full);                          /*decrement full count*/

down(&mutex);                     /*enter critical region*/

item=remove_item();            /*take item from buffer*/

up(&mutex);                          /*leave critical region*/

up(&empty);                          /*increment count of empty slots*/

consume_item(item);            /*do something with the item*/

}

}

 

Leave a Reply

Your email address will not be published. Required fields are marked *

5 Views
%d bloggers like this: