如果保证相互排斥,比如使用信号量,那么程序是否会无死锁?

Dan*_*her 5 multithreading deadlock semaphore mutual-exclusion

我分别如下定义互斥和死锁:如果每个时刻,每个共享资源被分配给一个进程或者可用,则存在互斥条件.如果集合中的每个进程都在等待集合中只有另一个进程可能导致的事件,则一组进程将死锁.

比如,使用二进制信号量,确保其中只有一个可以同时进入其关键区域.由于每个流程在进入其关键区域之前都会向下运行,而在离开之后向上运行,因此可以保证互斥.

我知道有四个条件必须都能解决死锁,其中一个是互斥条件(在它们的关键部分中没有两个进程可以同时进行).

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

问候.

tem*_*def 6

不必要.想象一下这两个主题:

 Thread 1          Thread 2
 ============      =============
 Acquire A         Acquire B
 Acquire B         Acquire A
 Release B         Release A
 Release A         Release B
Run Code Online (Sandbox Code Playgroud)

在这里,确实保证了互斥 - 在每个瞬间,信号量A和B要么由其中一个线程拥有,要么在系统范围内可用 - 但是如果线程1和2各自获得它们的第一个锁定(线程1,B的A),则死锁仍然是可能的.对于线程2),但随后将死锁等待对方持有的资源.

希望这可以帮助!