某银行有人命币储蓄业务,有 n 个柜员负责,有 1 台取号机和一台叫号机。每个顾客进入银行之后先取一个号,若有人取号必须等这个人取完号才能取号,取到号的人就等待叫号。当一个柜员人员空闲下来,就叫下一个

某银行有人命币储蓄业务,有 n 个柜员负责,有 1 台取号机和一台叫号机。每个顾客进入银行之后先取一个号,若有人取号必须等这个人取完号才能取号,取到号的人就等待叫号。当一个柜员人员空闲下来,就叫下一个号,试用 P、V 操作编写柜台人员和顾客进程的程序。

semaphore fmutex=1;  互斥信号量,取号机 
semaphore cmutex=1;	 互斥信号量,叫号机 
semaphore full=0;	 等待被叫号的数量 
semaphore sell=n;    记录是否有空闲的柜员 

void customer()
{ 
	while(true)
	{ 
		P(fmutex);
		//取号;
		V(fmutex);
		V(full);
		//等待叫号
		P(sell); 
		//办理业务; 
	}
}  

void seller()
{ 
	while(true)
	{ 
		P(full);
		P(cmutex);
		//叫号
		V(cmutex);
		//服务
		V(sell); 
	}
}
    原文作者:油醋三椒
    原文地址: https://blog.csdn.net/weixin_42664622/article/details/101387856
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞