我们总是听说死锁的必要条件之一是互斥,一次只能有一个线程持有锁。
但是,我认为非互斥锁可能导致死锁是不是错了?
考虑一个信号量的简单情况,它最多允许两个线程来保存它。假设我们有两个 2 信号量,A 和 B。假设我们有 4 个进程,进程 A1、A2、B1 和 B2。
假设进程 A1 和 A2 各自获取信号量 A,进程 B1 和 B2 获取信号量 B。如果我们达到 A1 和 A2 都想要信号量 B,而进程 B1 和 B2 都想要信号量 A,每个进程都没有放弃它们当前的锁,就会出现死锁,因为信号量只能由两个进程持有。但是信号量允许两个进程持有它,所以它不是互斥的!
有人可以解释这是不是错误的推理,还是我对互斥的解释是错误的?