A deadlock is a state in which each member of a group is waiting for another member, including itself, to take action.
lock(&lk); // xchg(&lk->locked, LOCKED) == ... // Possibly in interrupt handler lock(&lk); // xchg(&lk->locked, LOCKED) ==
void T_philosopher() { P(&avail[lhs]); P(&avail[rhs]); // ... V(&avail[lhs]); V(&avail[rhs]); }
“理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。”