例:某银行提供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);//叫号
//服务
}
本文介绍了一个银行排队系统的模拟实现,通过使用互斥信号量和资源信号量来协调顾客和服务员的行为。具体包括如何通过信号量控制顾客取号、等待及接受服务的过程。
3513

被折叠的 条评论
为什么被折叠?



