【发布时间】:2014-05-05 13:32:53
【问题描述】:
我们总是听说死锁的必要条件之一是互斥,一次只能有一个线程持有锁。
但是,我认为非互斥锁可能导致死锁是不是错了?
考虑一个信号量的简单情况,它允许最多两个线程来保存它。假设我们有两个 2 信号量,A 和 B。假设我们有 4 个进程,进程 A1、A2、B1 和 B2。
假设进程 A1 和 A2 各自抢信号量 A,进程 B1 和 B2 抢信号量 B。如果我们达到 A1 和 A2 都想要信号量 B,而进程 B1 和 B2 都想要信号量 A,每个都没有放弃他们当前的锁,就会出现死锁,因为信号量只能由两个进程持有。但是信号量允许两个进程持有它,所以它不是互斥的!
有人可以解释这是不是错误的推理,还是我对互斥的解释是错误的?
【问题讨论】:
-
信号量死锁当然是可能的,是的。
-
您描述的情况可能导致死锁是正确的。您对互斥的解释没有错,但是您关于死锁需要互斥的断言是错误的。您只需要某种类型的排除。
标签: multithreading deadlock computer-science-theory