首页 > 试题广场 >

回答下面问题

[问答题]

某银行提供 1 个服务窗口和 10 个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:

{ 
 Process 顾客 i 
 { 
     从取号机获取一个号码; 
     等待叫号; 
     获取服务;
} 
 Process 营业员 
 { 
     While( TRUE) 
     { 
         叫号; 
         为顾客服务; 
     } 
 }
}

请添加必要的信号量和P、 V(或 wait()、 signal())操作,实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。

无人在意叫号行为吗
叫号不该是选择唤醒吗,诚然一般是先来先服务,可严谨地讲,不能越序叫人吗,而且题解的意思明明是各个顾客在抢服务
发表于 2021-11-20 23:20:52 回复(0)

(1)互斥资源:取号机(一次仅允许一位顾客领号),设一个互斥信号量 mutex。

(2)同步问题:顾客需要获得空座位等待叫号,当营业员空闲时,将选取一位顾客为其服务。有无空座位决定了顾客等待与否,有无顾客决定了营业员是否提供服务,故设置信号量empty 和 full 来实现这个同步关系。另外,顾客获得空座位后,需要等待叫号和被服务。这样,顾客和营业员之间也存在同步关系,定义信号量 service来控制这个同步。


 

发表于 2016-11-19 16:33:36 回复(0)