考研复习(12)-理发师问题

 //理发店里有一位理发师,一把理发椅和三把等候椅,编写程序协调顾客和理发师
int count=0;
//记录理发店里的顾客数
semaphore barber_chair=1;
// 理发椅一张
semaphore wait_chair=3;
//等待椅子三张
semaphore mutex=1;
//互斥地访问count的信号量
semaphore ready=0;
//准备好的可以理发的数量当成理发师所需要的资源
semaphore finish=0;
//理发师完成理发后发给顾客的信号量作为顾客的资源
Barber()
{
 while(1)
 {
 wait(ready);
 barbering;
 signal(finish);
 //告诉理发椅子上的顾客理发已经完成
 }
}
Customer()
{
 while(1)
 {
 wait(mutex);
 if(count>=3)
        {
         signal(mutex);
          leaving;
         }
 else{
          count++;
           signal(mutex);
       }
 wait(wait_chair);
 wait(barber_chair);
 signal(wait_chair);
 signal(ready);
 be barbered;
 wait(finish);
 //等待理发师剪完
 signal(barber_chair);
 //离开理发椅子
 wait(mutex);
 count--;
 //更新店里的顾客数
 signal(mutex);
 }
}
 

你可能感兴趣的:(Semaphore,Signal)