P(SH) 抽烟
设信号量:SY, SH,CY,CH:初值都为0
甲服务员 REPEAT P(SY) 送烟 V(CY)
UNTIL FALSE
乙服务员 REPEAT P(SH) 送火 V(CH)
UNTIL FALSE 顾客
V(SY) /*(请求送烟)*/
V(SH) /*(请求送火)*/ P(CY) /* (等烟) */ P(CH) /* (等火) */ 抽烟
(四)一家四人父、母、儿子、女儿围桌而坐;桌上有一个水果盘; (1) 当水果盘空时,父亲可以放香蕉或者母亲可以放苹果,但盘中已有水果时,就不能放,父母等待。当盘中有香蕉时,女儿可吃香蕉,否则,女儿等待;当盘中有苹果时,儿子可吃,否则,儿子等待。
设置信号量 S=1; SB=0; SA=0;
F:父亲 M:母亲 S:儿子 D:女儿 F: P(S) 放香蕉 V(SB) GOTO F M: P(S) 放苹果 V(SA) GOTO M S: P(SB) 吃香蕉 V(S) GOTO S D: P(SA) 吃苹果 V(S) GOTO D
解 设信号量:SE=1 (空盘子);SA=0 (放了苹果的盘子);SB=0 (放了香蕉的盘子) 父亲 REPEAT 剥香蕉 P(SE) 放香蕉 V(SB)
UNTIL FALSE 母亲 REPEAT 削苹果 P(SE) 放苹果 V(SA)
UNTIL FALSE 儿子 P(SA) 拿苹果 V(SE) 吃苹果 女儿 P(SB) 拿香蕉 V(SE) 吃香蕉
(2) 把(1)改为:儿子要吃苹果时,请母亲放苹果,女儿要吃香蕉时,请父亲放香蕉,(还是盘子为空时才可以放)。
设 信号量 S=1;SA=0;SB=0;CA=0;CB=0; F: P(SB) P(S) 放香蕉 V(CB) GOTO F M: P(SA) P(S) 放苹果
V(CA) GOTO M S: V(SA) P(CA) 吃苹果 V(S) D: V(SB) P(CB) 吃香蕉 V(S)
(2)解:再增加两个信号量:SF=0, SM=0 父亲 REPEAT P(SF) 剥香蕉 P(SE) 放香蕉 V(SB)
UNTIL FALSE 母亲 REPEAT P(SM)
削苹果 P(SE) 放苹果 V(SA)
UNTIL FALSE 儿子 V(SM) P(SA) 拿苹果 V(SE) 吃苹果 女儿 V(SF) P(SB) 拿香蕉 V(SE) 吃香蕉