第二章 进程管理(part8).pptVIP

  • 1
  • 0
  • 约6.08千字
  • 约 29页
  • 2017-10-05 发布于上海
  • 举报
睡眠的理发师问题 理发店里有一位理发师、一把理发椅和n把椅子供等候的顾客坐。如果没有顾客,理发师便在理发椅上睡觉。 当一个顾客到来时,他必须先叫醒理发师,如果理发师正在理发时有顾客到来,他们就坐下来(如果有空椅子)或者离开(如果椅子坐满了)。 这里的问题是为理发师和顾客各编写一段程序来描述他们行为,要求不能带有竞争条件。 该问题类似于许多排队情形,例如多人技术支持系统(multiperson helpdesk)用计算机处理的呼叫等候系统来支持有限数目的电话呼入。 睡眠的理发师问题 睡眠的理发师问题 理发师问题的一种解法(1/2) 睡眠的理发师问题 理发师问题的一种解法(2/2) 睡眠的理发师问题 解法使用3个信号量:customers用来统计等候的顾客数;barbers为正在等候顾客的理发师数,为0或1;mutex用于互斥。我们还需要一个变量waiting,同样用于统计等候的顾客数,它实际上是customers的一份拷贝。之所以使用waiting是因为无法读取信号量的当前值。在该解法中,进入理发店顾客必须先数一数等候的顾客数,如果少于椅子数,留下来;否则离开。 理发师早晨开始工作时,他执行例程barber,这将导致他阻塞在信号量customers其初值为0。然后他将去睡觉,一直睡到第一个顾客出现。 睡眠的理发师问题 当一个顾客到来时,他执行过程customer,首先获取信号量m

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档