进程同步之理发师问题的理解

描述:理发店有一位理发师和一把理发椅。如果没有顾客,则理发师在理发椅上睡觉;当有顾客到达时,如理发师在睡觉则唤醒他理发,如果理发师正忙着理发,则坐在椅上等待。   

编写程序实现理发师和顾客行为的正确描述。 

 

行为分析:

  Ø理发师行为:睡觉、理发。没有顾客睡觉,有顾客理发。

  Ø顾客行为:理发或等待。

  Ø相互作用:

    理发师与顾客之间:同步

    顾客与顾客之间:无

信号量设置:

  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

 

你可能感兴趣的:(操作系统)