一道关于信号量的题目

答案:

----------------------------------------------------------

a. P(S1)

b. V(S2) V(S3)

c.P(S2)

d.V(S4)

e.P(S4)

f.V(S5)

----------------------------------------------------------

信号量问题还可以理解, 但是理解不了这道题. 好好地对了对答案, 发现个问题, 题目里没有说S1是P1的信号量, S2是P2的信号量.

题目用了大量的P1,S1, a,b,c,d , 选项又是ABCD,

所以题目就是为了让大家出错.

如果程序写成这样, 会被打S.

一旦发现了S1和P1的关系, 不在数字1上这个关键点, 就好办了. 建议做题的时候, 使用进程1, 进程2来代替P1,P2... 这道题答不对, 我觉得就是乱在文字上.

进程1 结束, 要发信号给 进程2. 题目里用了 V(S1), 也就是信号1的V操作.

那么进程2执行之前, 应该收到信号, 去做-1操作,及P操作. 那么就是P(S1). 信号量就是进程1结束时的信号量.

进程2结束之后, 要给进程3和进程4发型号, 那么用两个变量S2,S3, 做+1 V操作. 通知进程3和进程4,

到底是进程3使用S2, 还是S3, 还是进程4使用S3,S2,  看下文, 进程4执行的时候,做了S3的减操作,意思是进程4收到了S3, 而S3是进程2结束后发出的, 所以进程2-->进程4 这条线用了S3

所以进程2->进程3 使用了S2.   所以

到了进程3开始, 就要做S2的减操作, 就是P(S2).

进程3结束, 应该给进程4再发一个信号, 那么排下来, 就是S4咯. 所以d就是 V(S4).

进程4执行有两个信号, P(S3)给了, 刚才进程3结束又来了一个S4, 那么 e 填P(S4)

进程4结束后, 通知进程5, 再给一个变量S5, 通知一下, 就是V(S5).

原文地址:https://www.cnblogs.com/tekikesyo/p/10893824.html