因为最近在看APUE的多线程里面有讲到死锁,而且操作系统也在讲死锁的概念,就在此总结一下,后续还会陆续的添加
1.死锁的定义
系统中存在的一组进程,它们中的每一个进程都占用了某种资源而而又都在等待着其中的另一个进程所占用的资源而无限期的僵持下去的局面。
2.死锁的根本原因
系统能提供的资源个数比要求该资源的进程数要少。
3.死锁产生的必要条件
(1)互斥条件:一个资源只能由一个进程占有
(2)不可抢占条件:占有资源的进程如果未释放资源,申请资源的进程不能
强行的抢走占有者手中的资源。
(3)占有且等待条件:进程至少占用一个资源,在所占有的资源未使用
完之前又申请新资源,由于申请的资源已被另外的进程占有,此刻该资源处于
等待资源状态。
(4)循环等待条件:存在一个进程等待序列形成一个进程循环等待环。
4.死锁的预防
(1)破坏互斥条件 受到资源本身的限制,有些资源必须互斥访问,
如共用数据的访问,所以破坏互斥条件的来防止死锁是不切实际的
(2)破坏不可抢占条件 不是对所有资源都适用,如打印机。
(3)破坏占有且等待条件 使用静态分配法即在一个进程执行前就申请它
所需的全部资源,但这种方法资源利用率低,并发性不高。
(4)破坏循环等待条件 即按顺序加锁。