目录
1 死锁的定义
两个或者两个以上线程在执行过程中,因为竞争资源或者彼此通信而造成的一种阻塞现象,如果没有外力作用,他们都将无法进行下去。此时称系统处于死锁状态或者系统产生了死锁
2 死锁产生的四个必要条件
互斥条件 | 两个条件a和吧,两个线程都要得到这两个资源才能运行, 线程1获得了a等待获取b,线程2获取了b等待获取a,两个线程相互竞争、等待,产生死锁 |
请求和保持条件 | 1、线程已经保持至少一个资源,并保持这个资源不释放:保持不释放 2、线程要获取新的资源请求、但是该资源已经被别的线程占用:请求已占用 |
不剥夺条件 | 保持的资源只能线程执行完了才能释放 |
环路等待条件 | 即线程1在等待线程2释放资源,线程2在等待线程1释放资源,产生环路 |
3 操作系统解决死锁的常用方式
3.1 有序资源法
有个两个资源R1和R2,给R1和R2编号为1、2,让线程获取资源的顺序为1,2,从而避免死锁
线程1获取资源:R1,R2
线程2获取资源:R1,R2
3.2 银行家算法
参考这篇博客:避免死锁: 银行家算法