由于信号量机制使用两个队列:
在两种可能的情况下:
如果①信号量的信号是负的(相当大),
②提供所需资源的必要过程被阻止,会出现死锁吗?
例如,我们在块队列中有三个进程,但信号为负五(s = -5),进程是否会永久阻塞在队列中?
在第二种情况下,如果进程P1,P2,P3依赖于P4的结果,并且P4在队列中被阻塞(是否可能?),那么我们无法通过semSignal()增加信号量,表明陷入僵局?
答案 0 :(得分:0)
例如,我们在块队列中有三个进程,但信号是 负五(s = -5),将永远阻止进程 队列?
如果你接受信号量计数变为负数的概念,即。负值表示等待线程的数量,如果只有三个线程在等待,则计数不能变为-5。如果发生这种情况,那么您的信号量实现就会受到影响。
在第二种情况下,如果过程P1,P2,P3依赖于P4的结果,并且 P4被阻塞在一个队列中(可能吗?),所以我们无能为力 通过semSignal()增加信号量,表示死锁?
我不明白这种情况。它没有描述死锁。如果P4卡在某个队列上,这就是为什么四个线程无法前进,因为它们都被阻止的原因,那么你应该弄清楚为什么P4一开始就卡住了。
如果P4正在等待来自p1,p2和/或p3的某些信号,则可能发生死锁。
在可以想到的所有情况下,在额外的信号量单位中试图逃脱僵局,将是一个泄漏核反应堆的创可贴。