本文共 949 字,大约阅读时间需要 3 分钟。
顾客,业务员
取号机,椅子,顾客,业务员
定义共享变量及私有变量
int number=0;//顾客计数器
定义代表临界资源的信号量
Semaphore getNum=1;//互斥改变顾客序号number
顾客进入银行
取号机取号
顾客数增1
业务员叫号
办理业务
顾客数减1
呼叫一位顾客
办理业务
int Number=0;//顾客计数器semaphore getNum=1;//互斥改变顾客序Numbersemaphore customers=0;//顾客数信号量semaphore callMe=0; //等待叫号的顾客数信号量/*顾客进程的实现*/Process customer(){ 到来; P(getNum);//互斥取号 Number++;//取号 V(getNum); V(customers);/顾客数加1 P(callMe);//等待叫号 办理业务; P(getNum);//顾客数减1 Number--;V(getNum);离开;}/*业务员进程实现*/Process worker(){ While(1) { P(customers);//取一个顾客号 V(callMe);//叫号 办理业务; }}
拓展问题:顾客银行办理业务时,首先在取号机上取号,然后坐在椅子上等候业务员叫号时前往窗口办理业务,如果等待时间超过1小时,则顾客离开.椅子有20把,如果没有空椅子,则顾客站立,如果站立等待超过30分钟,则顾客离开,等待假设银行现在有3个窗口可办理业务,请采用信号量和PV操作描述顾取号等候叫号和银行业务员叫号办理业务的同步操作。
转载地址:http://titmb.baihongyu.com/