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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Y_215/article/details/53467517

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

问题背景:

司机开车,售票员售票。

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

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

分析:

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)

开门


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


还请各位童鞋多多指教

展开阅读全文

没有更多推荐了,返回首页