Solution to the Producer-Consumer problem using Semaphores

Solution to the Producer-Consumer problem using Semaphores

 

 

One problem with implementing a Sleep and Wakeup policy is the potential for losing Wakeups. Semaphores solve the problem of lost wakeups. In the Producer-Consumer problem, semaphores are used for two purposes:

  • mutual exclusion and
  • synchronization.

 

In the following example there are three semaphores. Full, used for counting the number of slots that are full; empty, used for counting the number of slots that are empty; and mutex, used to enforce mutual exclusion.

 

 

  BufferSize = 3;

  semaphore mutex = 1;              // Controls access to critical section
  semaphore empty = BufferSize;     // counts number of empty buffer slots
  semaphore full = 0;               // counts number of full buffer slots

  Producer()
  {
    int widget;

    while (TRUE) {                  // loop forever
      make_new(widget);             // create a new widget to put in the buffer
      down(&empty);                 // decrement the empty semaphore
      down(&mutex);                 // enter critical section
      put_item(widget);             // put widget in buffer
      up(&mutex);                   // leave critical section
      up(&full);                    // increment the full semaphore
      }
  }

  Consumer()
  {
    int widget;
      
    while (TRUE) {                  // loop forever
      down(&full);                  // decrement the full semaphore
      down(&mutex);                 // enter critical section
      remove_item(widget);          // take a widget from the buffer
      up(&mutex);                   // leave critical section
      up(&empty);                   // increment the empty semaphore
      consume_item(widget);         // consume the item
      }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值