首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有互斥的情况下可能出现死锁?

在没有互斥的情况下可能出现死锁?
EN

Stack Overflow用户
提问于 2014-05-05 21:32:54
回答 1查看 567关注 0票数 1

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

然而,我认为非互斥锁有可能导致死锁的想法是错误的吗?

考虑这样一个简单的例子,一个信号量最多允许两个线程来持有它。假设我们有两个2-信号量,A和B。假设我们有4个进程,进程A1、A2、B1和B2。

假设进程A1和A2各自抢占信号量A,进程B1和B2抢占信号量B。如果我们到达一个点,其中A1和A2都想要信号量B,而进程B1和B2都想要信号量A,并且每个进程都没有放弃当前的锁,那么就会出现死锁,因为信号量只能由两个进程持有。但是信号量允许两个进程持有它,所以它不是相互排斥的!

谁能解释一下,这是不是错误的推理,或者我对互斥的解释是错误的?

EN

回答 1

Stack Overflow用户

发布于 2014-05-05 22:23:58

您是对的,您所描述的场景会导致使用计数信号量的死锁。互斥条件,取自

亚伯拉罕·西尔伯沙茨,彼得·贝尔·加尔文和格雷格·加尼。2008年。操作系统概念(第7版)。威利出版公司。

说:

必须以非共享模式保存至少一个资源;即,一次只能有一个进程使用该资源。如果另一个进程请求该资源,则必须延迟请求进程,直到释放该资源。

看似矛盾的解决方案是,当计数信号量达到值1时,它(或它所保护的资源)实际上成为不可共享的,因此从那一刻起,众所周知的条件就适用了。换句话说,您开始检查系统的时间有点太早了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23473819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档