2013-03-05 49 views
5

我定义相互排斥和分别如下死锁,:如果在每一个时刻,每个共享资源要么分配给一个进程,或可用存在 互斥状态。 如果集合中的每个进程正在等待只有集合中的另一个进程可能导致的事件,则会导致一组进程死锁。如果保证互斥,用信号量说,是一个程序无死锁?

说,二进制信号的使用,确保只有一个能在同一时间进入临界区域。由于每个进程在进入其临界区域之前都会发生一次倒退,并且在离开之后会立即停止,因此可以保证相互排斥。

我知道有四个条件必须适用于发生死锁,其中之一是互斥条件(两个进程可能不会同时在其关键部分内)。

由于相互排斥是保证,是程序,在这种情况下,无死锁?

问候。

回答

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每个获得它们的第一个锁(线程1的B,线程2的B),但是会等待另一个持有的资源死锁。

希望这会有所帮助!