试用 P、V操作描述下列理发师和顾客之间的同步问题

P、V操作解决同步问题

题目:

试用 P、V操作描述下列理发师和顾客之间的同步问题:
某个理发理师当没有顾客时,去睡觉;当有顾客来理发,若理发师正在睡觉时,这个顾客会叫醒他,理发师给该顾客理发,理发期间若还有顾客到达则等待理发理师依次理发,直到没有顾客到来,理发理师又去睡觉。


分析思路:

题目可以看做是 N个生产者和一个消费者问题。顾客作为生产者,每到来一位,就应将计数器 rc 计数一次,以便让理发师理发至最后一位顾客。

因此顾客进程执行的第一个语句便是 rc=rc+1。而第一个到来的顾客应负责唤醒理发师,理发师此时正在信号量 wakeup上等待(P(wakeup));该信号量初值为 0,由第一个顾客执行 V(wakeup)。

若该顾客不是第一个到达者,则在信号量 wait上等待(P(wait));该信号量初值为 0,等到理发师给前一位顾客理完发后执行 V(wait),便给该顾客理发。

以上过程循环往复,理发师每处理完一个顾客,就令计数器 rc值减 1,当 rc=0时,便知此时无顾客,理发师可继续睡觉,等待下一批顾客的到达。为了保证对计数器 rc互斥使用,还需要设置信号量 mutex(初值为 1)。

一定要设置信号量代表的含义和初值,P操作和V操作是对应的

答:用 P、V操作描述理发师和顾客之间的同步问题:

wakeup, wait, mutex : Semaphore;
wakeup := 0; wait := 0; mutex := 1;
cobegin
顾客进程:
{
   P(mutex);
   rc= rc+1;
   if (rc==1)
   V(wakeup);
   else
   P(wait);
   V(mutex);
   理发;
}
理发师进程:
   {
     P(wakeup);
     while (rc!=0)
     {
      理发;
      P(mutex);
      rc=rc-1;
      if (rc!=0)
      V(wait);
      V(mutex);
      }
    }
  coend
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值