[https://en.wikipedia.org/wiki/Deadlock#Necessary_conditions][1]
在此Wikipedia文章中,作者提到为了使僵局发生,必须满足四个条件(互斥,保持和等待,循环等待,无先占)。如果没有验证,就不会有死锁。
让我们看看这种情况。
semaphore s(0); // initialized with 0
wait(s);
rest of code...
我们可以看到该过程不会取得任何进展,因此死锁的定义是有效的。尽管没有其他进程可以发出s信号,所以没有验证先占权。但是循环等待,硬件和互斥都不是。在这种情况下是否会出现死锁?是否已验证所有条件?还是死锁的定义我错了?
答案 0 :(得分:0)
当一个进程p1和第二个进程p2竞争关键部分时发生死锁:
p1: wait(Q); wait(S); ...
p2: wait(S); wait(Q); ...
有时上述所有3个条件都得到满足,但仍然没有死锁。所以要视情况而定。