1.死锁的概念:
多个线程在执行态中因争夺资源造成的一种僵局,若无外力将一直保持这种状态,这些永远互相等待的进程称为死锁进程
2.造成死锁的四个必要条件
1)互斥条件:进程对所分配到的资源进行排他性使用,即在一个时间段内某资源只能被一个进程占用,若有其他进程访问,则要等待,直到该资源被占用的进程释放掉。
2)请求和保持:进程已经占用至少一个资源,又要请求新的资源,新的资源被其他进程占用,此时请求阻塞,但又对自己已占有的资源保持不放。
3)不剥夺条件:指进程占有的资源在未使用完之前不能被剥夺,只能在使用完后自己释放掉。
4)环路等待条件:p0在等待p1的资源,p1在等待P2的资源,p2在等待p0的资源。
3.处理死锁的四个方式
死锁的预防、死锁的避免、死锁的检测、死锁的解除
1)死锁的预防:破坏生成死锁的四个条件中的一个。比如进程在申请资源时一次性申请所需要的全部资源,这就破坏了保持和等待条件。将资源分层,得到上一层资源后,才能申请下一层资源,破坏了环路等待条件。
2)死锁避免:每次申请资源时判断这些操作是否安全。比如银行家算法。会增大系统的开销。
3)死锁的检测:判断系统是否处于死锁状态。
4)死锁的解除:与死锁检测一起使用,方式是剥夺资源,将进程所拥有的资源强行收回分配给其他进程。
要避免死锁,要事先知道系统所拥有的资源数量和属性。