一道关于信号量的题目
答案:
----------------------------------------------------------
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).