PV操作经典例题——银行业务办理问题

例:某银行提供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);//叫号
	//服务
}

你可能感兴趣的:(操作系统)