同步互斥——司机售票员问题

司机售票员问题是一个同步问题。

问题背景:

司机开车,售票员售票。

当售票员将门关上的时候司机才可以开车,

当司机将车到站停下的时候,售票员才可以打开车门。

分析:

1.此问题属于同步问题还是互斥问题?

同步问题。司机和售票员共享资源——车门,以及车的状态。通过状态传递才能进行下一步的操作。因此是同步问题。

此问题有两个共享资源,门和车,分别设置为s1和s2 。

2.信号量的初始值如何设定?

首先确定信号量为0或1的时候分别代表什么意义。

售票员和司机都有自己的操作。

售票员:关门,售票,开门

司机:开车,正常行驶,到站停车

对S1(门): 门有两个状态,开和关。售票员将门关上之后,应该讲门的操作权释放给司机(因为只有司机到站了才能停车)。因此0为门开着状态。

对S2(车):两个状态,开车行驶和到站停车。当车开的时候,需要申请车的资源,即用wait,则车在听着的时候状态为1,行驶是状态为0.

因此可得:S1初始状态S1 = 0,S2 = 1;

3.如何确定wait和signal的位置?

首先对司机,司机的操作有:

(1)开车前申请车门资源以判断门是否关好可以开车

(2)到站后停车,释放车的资源

因此司机的状态:


司机


wait(S1)

开车

正常行驶

到站停车

signal(S2)

其次对售票员,售票员的操作有:

(1)关门(可售票),释放门的资源

(2)售票,停车后可以开门,开门之前要申请门的资源以判断是否可以开门

因此售票员的状态:


售票员


关门

signal(S1)

售票

wait(s2)

开门


注:因为起始状态不一样,得到答案有不同结果。但注意起始状态是指司机和售票员的动作是循环的,从循环中不同的结点开始会产生不同的结果。


还请各位童鞋多多指教

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值