死锁可能没有相互排斥?

时间:2014-05-05 13:32:54

标签: multithreading deadlock computer-science-theory

我们总是听说死锁的必要条件之一是互斥,一次只有一个线程可以锁定。

但是,我错误地认为非互斥锁可能导致死锁?

考虑一个信号量的简单情况,它允许最多两个线程来保存它。假设我们有两个2信号量,A和B.假设我们有4个进程,进程A1,A2,B1和B2。

假设进程A1和A2各自获取信号量A,进程B1和B2获取信号量B.如果我们到达A1和A2都需要信号量B的点,并且进程B1和B2都想要信号量A,每个都不放弃他们当前的锁,会有一个死锁,因为信号量只能由两个进程持有。但是信号量允许两个进程保持它,所以它不是互斥的!

有人可以解释这是不正确的推理,还是我对互斥的解释是错误的?

1 个答案:

答案 0 :(得分:1)

您说的是正确的,您使用计数信号量会导致死锁。 互斥条件取自

  

Abraham Silberschatz,Peter Baer Galvin和Greg Gagne。 “操作系统概念”(第7版)。 Wiley Publishing。

表示:

  

至少有一个资源必须保存在不可共享的资源中   模式;也就是说,一次只有一个进程可以使用该资源。如果另一个   进程请求该资源,请求进程必须延迟   直到资源被释放。

看似矛盾的解决方案是,当计数信号量达到值1时,它(或它所守护的资源)实际上变得不可分,因此从众所周知的条件开始适用。 换句话说,你开始过早地检查系统了。

相关问题