您的当前位置:首页正文

福州大学,操作系统,pv操作,理发师问题

2021-07-26 来源:独旅网


理发师问题

一个理发师,一把理发椅,n把等候理发的顾客椅子。

(1)如果没有顾客则理发师便在理发椅上睡觉

(2)当有一个顾客到达时,首先看理发师在干什么,

如果理发师在睡觉,则唤醒理发师理发;

如果理发师正在理发,则查看是否有空的顾客椅子可坐,

如果有,坐下等待,如果没有,则离开。

(3)理发师为一位顾客理完发后,查看是否有人在等待,

如果有则唤醒下一位顾客理发,没有则理发师去睡觉

customers=0; //顾客等待服务的信号量

barber=0; //理发师等待顾客的信号量

mutex=1; //互斥信号量

waiting=0; //等待理发的顾客数

CHAIRS=n; //表示椅子的总数为n

process barber

begin

while true do

begin

p(customers); //顾客数为0,则入睡

P(mutex); //进入临界区

waiting := waiting - 1; //减少顾客数

V(barber); //理发师准备理发

V(mutex);

Cut_hair();

End;

End;

process customer

begin

P(mutex); //进入临界区

if(waiting < CHAIRS)

begin

waiting := waiting + 1; //增加顾客数

V(customers); //如有必要,则唤醒理发师

V(mutex); //释放信号量mutex

P(barber); //如果无顾客,则理发师入睡

Get_hair(); //进入理发店理发

End;

else

V(mutex); //已满,离开

End;

因篇幅问题不能全部显示,请点此查看更多更全内容