这是我在网上找到的最详实,最严谨的资料了贴在下面和大家分享哦,O(∩_∩)O~
2.3.3 理发師睡觉问题
理发店里有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子如果没有顾客,则理发师便在理发椅上睡觉如图2-20所示。当一个顾客到来时他必须先叫醒理发师,如果理发师正在理发时又有顾客来到则如果有空椅子可坐,他们就坐下来等如果没有空椅子,他就离开这里的问题是为理发师和顾客各编写一段程序来描述他们的行为,要求不能带有竞争条件
图2-20 睡觉什么的理发师师
我们嘚解法使用三个信号量:customers,用来记录等候理发的顾客数(不包括正在理发的顾客);barbers记录正在等候顾客什么的理发师师数,为0或1;mutex用于互斥。我们还需要一个变量waiting它也用于记录等候的顾客数,实际上是customers的一份拷贝之所以使用waiting是因为无法读取信号量的当前值。在该解法中进入理发店的顾客必须先看等候的顾客数,如果少于椅子数他留下来等,否则他就离开
我们的解法示于图2-21。
/*如果顾客数是0则睡眠*/ /*┅个理发师现在开始理发了*/ {/*如果没有空椅子,就离开*/
图2-21 理发师问题的一种解法