例:某银行提供1个服务窗口和10个供顾客等待的座位,顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用,当营业员空闲时,通过叫号选取一位顾客,并为其服务。
解析:
- 取号机每次只允许一人使用,需设置互斥信号量mutex。
- 座位只有十个,需设置资源信号量seat=10。
- 叫号工作人员要知道目前挂号人数,需设置资源信号量count
设:mutex=1; seat=10; count=0;
void customer()
{
while(true)
{
wait(seat);
wait(mutex);
//此阶段为顾客取号时期
signal(mutex);
signal(count);//取号数加1
//此阶段为回到座位等待被叫号服务,一旦被叫号,则失去座位控制权
signal(seat);
//此阶段获得服务
}
}
void assistant()
{
wait(count);//叫号
//服务
}