某银行的营业厅有多个柜员窗口,可以同时办理业务。银行的营业厅中安排有门张座倚供储户休息等候。每个储户在进入营业厅时会在排队机上取得一个号码,若此前没有客户,则排队机就会唤醒一个柜员为储户服务,当没有储户时柜员便可以休息。若储户较多,则所有柜员均会参与服务,

admin2014-07-18  34

问题 某银行的营业厅有多个柜员窗口,可以同时办理业务。银行的营业厅中安排有门张座倚供储户休息等候。每个储户在进入营业厅时会在排队机上取得一个号码,若此前没有客户,则排队机就会唤醒一个柜员为储户服务,当没有储户时柜员便可以休息。若储户较多,则所有柜员均会参与服务,当排队储户数超过柜员数时,没有被服务的储户便会在座椅上休息,并等候叫号。当座位满时,再进入营业厅的储户不再从排队机上获取号码,会离开去找另外的营业厅。若将银行的柜员和储户的行为看成是不同类型的进程,请设一个程序,利用信号量来完成上述操作,用类C语言写出程序。

选项

答案此类题目在考试中也比较多见,类似的还有睡眠的理发师等。因此,掌握此类题目的基本要点是解决此类题目的关键。本题从读者和写者的基本原理出发,对等候的储户数加以限制。从资源角度看,柜员是资源,座椅也是资源。那么,设置柜员的信号量为teller,初始为0,柜员一上岗则作V操作,以提供资源。储户的信号量为customer,初始为0,表示储户尚未进入营业厅。mutex为排队机,也是座椅的互斥量,柜员和储户均可以对此操作。设信号量teller,customer和mutex其中waiting是整型量,表示排队的储户数,其初始为O,最大不超过n #define CHAIRS=N //座椅数,也是最多排队的储户数 typecief int semaphore; //定义信号量 semaphore teller=O; //等待储户的柜员数 semaphore cLlstomer=0; //等待服务的储户数 semaphore mutex=0; //对排队机操作的互斥量 int waiting=O; //等待的储户数 void teller() { while(TRUE){//并发调度 P(customer); //杏看有无储户 P(mutex); //需要获得排队机的控制权 waiting=waiting-1; //将等候的顾客数减1 V(teller); //提供1个可服务的柜员 V(mutex); //释放排队机 service(); //为储户服务 } } void customer() //储户进程 } P(mutex); //先获得排队机 if(wailing
解析
转载请注明原文地址:https://kaotiyun.com/show/V4xi777K
0

最新回复(0)