本文主要是介绍进程同步之理发师问题的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述:理发店有一位理发师和一把理发椅。如果没有顾客,则理发师在理发椅上睡觉;当有顾客到达时,如理发师在睡觉则唤醒他理发,如果理发师正忙着理发,则坐在椅上等待。
编写程序实现理发师和顾客行为的正确描述。
行为分析:
Ø理发师行为:睡觉、理发。没有顾客睡觉,有顾客理发。
Ø顾客行为:理发或等待。
Ø相互作用:
理发师与顾客之间:同步
顾客与顾客之间:无
信号量设置:
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); //表示座位已经满了
}
这篇关于进程同步之理发师问题的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!