由于信号量机制使用两个队列:
在两种可能的情况下:
如果信号量的信号是负的(相当大),
2提供所需资源的基本过程被阻止,是否会出现死锁?
例如,我们在块队列中有三个进程,但是信号是负5 (s = -5),这些进程会永远阻塞在队列中吗?
在第二种情况下,如果process P1、P2、P3依赖于P4的结果,而P4在队列中被阻塞(这可能吗?),那么我们是否无法通过semSignal()来增加信号量,从而指示死锁?
发布于 2014-03-20 13:58:12
例如,我们在块队列中有三个进程,但是信号是负5 (s = -5),这些进程会永远阻塞在队列中吗?
如果您接受信号量计数的概念变得消极,即。负值表示等待线程的数量,如果只有三个线程等待,计数不能变为-5。如果发生这种情况,您的信号量实现将被轮询。
在第二种情况下,如果process P1、P2、P3依赖于P4的结果,而P4在队列中被阻塞(这可能吗?),那么我们是否无法通过semSignal()来增加信号量,从而指示死锁?
我不明白这种情况。它并不描述死锁。如果P4被卡在某个队列上,这就是为什么四个线程都被阻塞而不能向前推进的原因,那么首先您应该知道为什么P4被卡住了。
如果P4正在等待来自p1、p2和/或p3的信号,则可能出现死锁。
在我所能想到的任何情况下,插入额外的信号量单元,试图摆脱僵局,都是对泄漏的核反应堆的一种束带。
https://stackoverflow.com/questions/22483386
复制相似问题