信号量机制会导致死锁吗?

时间:2014-03-18 15:09:40

标签: operating-system deadlock semaphore

由于信号量机制使用两个队列:

  • 阻止队列
  • 就绪队列

在两种可能的情况下:

如果①信号量的信号是负的(相当大),

②提供所需资源的必要过程被阻止,会出现死锁吗?


例如,我们在块队列中有三个进程,但信号为负五(s = -5),进程是否会永久阻塞在队列中?

在第二种情况下,如果进程P1,P2,P3依赖于P4的结果,并且P4在队列中被阻塞(是否可能?),那么我们无法通过semSignal()增加信号量,表明陷入僵局?

1 个答案:

答案 0 :(得分:0)

  

例如,我们在块队列中有三个进程,但信号是   负五(s = -5),将永远阻止进程   队列?

如果你接受信号量计数变为负数的概念,即。负值表示等待线程的数量,如果只有三个线程在等待,则计数不能变为-5。如果发生这种情况,那么您的信号量实现就会受到影响。

  

在第二种情况下,如果过程P1,P2,P3依赖于P4的结果,并且   P4被阻塞在一个队列中(可能吗?),所以我们无能为力   通过semSignal()增加信号量,表示死锁?

我不明白这种情况。它没有描述死锁。如果P4卡在某个队列上,这就是为什么四个线程无法前进,因为它们都被阻止的原因,那么你应该弄清楚为什么P4一开始就卡住了。

如果P4正在等待来自p1,p2和/或p3的某些信号,则可能发生死锁。

在可以想到的所有情况下,在额外的信号量单位中试图逃脱僵局,将是一个泄漏核反应堆的创可贴。

相关问题