描述:理发店有一位理发师和一把理发椅。如果没有顾客,则理发师在理发椅上睡觉;当有顾客到达时,如理发师在睡觉则唤醒他理发,如果理发师正忙着理发,则坐在椅上等待。
编写程序实现理发师和顾客行为的正确描述。
行为分析:
Ø理发师行为:睡觉、理发。没有顾客睡觉,有顾客理发。
Ø顾客行为:理发或等待。
Ø相互作用:
理发师与顾客之间:同步
顾客与顾客之间:无
信号量设置:
semaphore customers=0; //customers表示等候理发的顾客数量
semaphore barbers=0; //barbars表示等候顾客的理发师数量
semaphore customers=0; //customers表示等候理发师的顾客
semaphore barbers=0; //barbars表示已经醒来的理发师
int waiting =0; //等待人数
semaphore mutex=1; //用于保护waiting的互斥访问
理发师进程:
while(1)
{
p(customers) //检查是否有顾客
P(mutex);
waiting=waiting-1;
v(mutex);
v(barbers) //理发师已醒来
Cut_hair();
}
顾客进程:
P(mutex) //占空椅子的操作是互斥的,即一个一个占
if(waiting<n) then //如果座位未满
{
waiting=waiting+1;
V(mutex);
V(customers);
P(barbers); //检查是否有醒来的理发师
Get_haircut();
}
else
{
V(mutex); //表示座位已经满了
}