死锁发生的四个必要条件:
1.互斥条件,同一时间只能有一个线程获取资源。
2.不可剥夺条件,一个线程已经占有的资源,在释放之前不会被其他线程抢占。
3.请求和保持条件,线程等待过程中不会释放已占有的资源。
4.循环等待条件,多个线程互相等待对方释放资源。
死锁的预防,就是要打破这四个必要条件:
1.互斥条件无法改变。
2.破坏不可剥夺条件,一个线程不能获取所需的全部资源处于等待的时候,将他占有的资源隐式的释放重新加入道系统资源列表中,可以被其他线程使用。
等待的线程只有重新获得自己原有的资源以及新申请的资源才可以重新启动。
3.破坏请求与保持条件,每个线程在开始执行时就申请他所需要的全部资源;每个线程在申请锁需要的资源时他本身不占用系统资源。
4.破坏循环等待条件,将系统中所有资源按顺序编号,将紧缺的,稀少的采用较大编号,在申请资源时必须按照编号顺序进行,一个线程只有先获得较小的编号的资源,才能申请较大编号的资源。