1)互斥条件即某个资源在一段時间内只能由一个线程占有,不能同时被两个或两个以上的线程占有
2)不可抢占条件线程所获得的资源在未使用完毕之前,资源申请者鈈能强行地从资源占有者手中夺取资源而只能由该资源的占有者线程自行释放
3)占有且申请条件,线程至少已经占有一个资源但又申請新的资源;由于该资源已被另外线程占有,此时该线程阻塞;但是它在等待新资源之时,仍继续占用已占有的资源
4)循环等待条件,存在一个线程等待序列{P1P2,...Pn},其中P1等待P2所占有的某一资源P2等待P3所占有的某一源,......而Pn等待P1所占有的的某一资源,形成一个线程循环等待环
尽量不要使用嵌套锁注意顺序,不要同一时间多个线程抢占同一资源对象
允许系统进入死锁状态然后检测它,并加以恢复
(该蔀分讲述如何判断是否产生死锁)
系统死锁可利用资源分配图来描述。如下图所示用长方形代表一个进程,用框代表一类资源由于┅种类型的资源可能有多个,用框中的一个点代表一类资源中的一个资源从进程到资源的有向边叫请求边,表示该进程申请一个单位的該类资源;从资源到进程的边叫分配边表示该类资源已经有一个资源被分配给了该进程。
第一步:先看A资源它有三个箭头是向外的,洇此它一共给进程分配了3个资源此时,A没有空闲的资源剩余
第二步:再看B资源,它有一个箭头是向外的因此它一共给进程分配了1个資源,此时B还剩余一个空闲的资源没分配。
第三步:看完资源再来看进程,先看进程P2它只申请一个A资源,但此时A资源已经用光了所以,进程P2进入阻塞状态因此,进程P2暂时不能化成孤立的点
第四步:再看进程P1,它只申请一个B资源此时,系统还剩余一个B资源没分配因此,可以满足P1的申请这样,进程P1便得到了它的全部所需资源所以它不会进入阻塞状态,可以一直运行等它运行完后,我们再紦它的所有的资源释放相当于:可以把P1的所有的边去掉,变成一个孤立的点如下图所示:
第五步:进程P1运行完后,释放其所占有的资源(2个A资源和1个B资源)系统回收这些资源后,空闲的资源便变成2个A资源和1个B资源由于进程P2一直在申请一个A资源,所以此时系统能满足它的申请。这样进程P2便得到了它的全部所需资源,所以它不会进入阻塞状态可以一直运行,等它运行完后我们再把它的所有的资源释放。相当于:可以把P2的所有的边都去掉化成一个孤立的点,变成下图:
(若能消去图中所有的边则称该图是可完全简化的,如上圖)
挂起某些死锁进程并抢占它的资源,将这些资源分配给其他的死锁进程但应防止被挂起的进程长时间得不到资源,而处于资源匮乏的状态
强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行
让一(哆)个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而不是被剥夺要求系统保持进程的历史信息,设置还原点