死锁:如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。
死锁有单进程死锁:进程A拥有资源1,而它又在请求资源1,而它所请求的资源1必须等待该资源使用完毕得到释放后才可被请求。这样,就陷入了自己的死锁。
还有多进程死锁:有进程A,进程B,进程A拥有资源1,需要请求正在被进程B占有的资源2。而进程B拥有资源2,请求正在被进程A占有的资源1。两个进程都在等待对方释放资源后请求该资源,而相互僵持,陷入死锁。
产生死锁的三个原因:
- 进程推进顺序不当造成死锁。
- 竞争不可抢占性资源引起死锁。
- 竞争可消耗性资源引起死锁。
产生死锁的四个必要条件:
- 互斥条件。某段时间内,一个资源一次只能被一个进程访问。
- 请求和保持条件。进程A已经拥有至少一个资源,此时又去申请其他资源,而该资源又正在被进程使用,此时请求进程阻塞,但对自己已经获得的资源保持不放。
- 不可抢占资源。进程已获得的资源在未使用完不能被抢占,只能在自己使用完时由自己释放。
- 循环等待序列。存在一个循环等待序列P0P1P2……Pn,P0请求正在被进程P1占有的资源,P1请求正在被P2占有的资源……Pn正在请求被进程P0占有的资源。
死锁的避免方法:
- 终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态中解除出来。
- 抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以打破死锁状态。
- 最好不用锁。