同步互斥-【2011真题】-某银行提供一个服务窗口...

在这里插入图片描述
同步关系:有座位才能取号;营业员空闲才能叫号;有顾客时才能叫号

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

【解题步骤】

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

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

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

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

【坑点】

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

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

这种题,最先找到同步和互斥关系!  然后找到每个p,p一般在某个行为的前边,如果这个p会让这个行为
等待,就添加在他前边呗~,然后难点个人觉得在 v添加在哪。
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)//离开座位
        
        
        为客户服务
        
    }
 
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值