目录
一、死锁的资源占用图
循环依赖导致资源无法释放而每个线程任务都无法执行完成。其中R表示资源集合,P表示进程/线程 ,每个点表示资源数,箭头表示请求和占用。
图 1)P1 依赖于 R1,而R1的剩余资源需要P2释放....用图来表示
P1->R1;R1->P2; P2->R3;P3->R2;R2->{P1,P2}; 这就有一个循环依赖的环;
P1->P2,P2->P3 即 P1->P3 。由于P3依赖于P1和P2的其中1个释放资源P3->{P1,P2},且P1和P2都依赖于P3 同时 {P1,P2}->P3造成了死锁。
图2)并不是说资源占用图种有给“环”,就会发生死锁。
P1依赖于 P2,P3的其中一个释放资源 P1->{P2,P3} ,
P3->R2, R2->{P1,P4} ,即 P3->{P1,P4} 其中P2没有依赖,P4没有依赖,虽然图中P1,P3存在一个“环”,但是这个环并不是进程间的依赖环,资源有机会被释放。所以不会构成死锁。