5

我将互斥和死锁分别定义如下: 如果在每一刻,每个共享资源要么被分配给一个进程,要么可用,则互斥条件存在。如果一组进程中的每个进程都在等待只有该组中的另一个进程可以引发的事件,则该组进程会死锁。

比如说,使用二进制信号量,确保它们中只有一个可以同时进入其临界区。由于每个进程在进入其关键区域之前执行一次向下操作,并在离开它之后执行一次向上操作,因此可以保证互斥。

我知道有四个条件必须全部满足才能发生死锁,其中之一是互斥条件(没有两个进程可能同时在它们的关键部分内)。

既然保证了互斥,那么在这种情况下,程序是否没有死锁?

问候。

4

1 回答 1

6

不必要。想象一下这两个线程:

 Thread 1          Thread 2
 ============      =============
 Acquire A         Acquire B
 Acquire B         Acquire A
 Release B         Release A
 Release A         Release B

在这里,确实可以保证互斥——在每一时刻,信号量 A 和 B 要么由其中一个线程拥有,要么在系统范围内可用——但如果线程 1 和 2 各自获得它们的第一个锁(A 代表线程 1,B对于线程 2),但随后将死锁等待对方持有的资源。

希望这可以帮助!

于 2013-03-05T04:20:44.563 回答