同步关系:有座位才能取号;营业员空闲才能叫号;有顾客时才能叫号

互斥关系:取号机互斥访问

【解题步骤】

1.草稿上进行进程行为轨迹,多留空位

2.一步一步往下走,要等待的地方就p一下

3.pv操作成对出现,根据p写完v

4.x先确定pv操作的位置,再思考设置什么样的信号量,信号量的含义是什么?

【坑点】

serve=0;是因为,serve代表的是营业员叫号,所以对于初始情况下,如果serve=1,顾客进程不需要叫号也获得了服务,这里的逻辑就不对了。

但是serve代表叫号这层含义让人很犹豫,因为题目中把“叫号”写出来了,让我觉得叫号是与“获取服务”/“取号”这类与信号量无关的操作。啊一西!

semaphore serve=0//1个服务窗口
semephore empty=10//10个座位
semaphore full=0;
semaphore mutex=1//1个取号机

process 顾客 i
{

    p(empty)//没有座位的时候要等待
   
    p(mutex)//取号机被占用的时候要等待
    从取号机上取号
    v(mutex)    
  
    v(full)//坐上座位
    
    等待叫号
    p(serve)//营业员没叫号要等待
   
    获取服务

}

process 营业员
{
    while(true)
    {
        p(full)//座位上没有一个人的时候要等待
       
        叫号
        v(serve)//营业员叫号
        
        v(empty)//离开座位
        
        
        为客户服务
        
    }

}

 

Logo

鸿蒙生态一站式服务平台。

更多推荐