学习小结
产生死锁的必要条件有哪些?
死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立
在Linux或Windows的实际应用中,用户常说的“死机” 或“系统卡住,键鼠没有任何响应”与本章的“死锁”是同一问题吗?死锁与程序的“死循环”是一回事吗?
(1)从产生来看。死锁具有偶然性,而死循环则有必然性。实际 上,死锁是一种小概率事件,一组进程只有在某种特定的交替执行场合 才会发生死锁,而绝大多数情况下不会发生死锁。而对存在死循环的程 序来说,在一次执行中出现了死循环,那么在相同的初始条件下,再次 执行则必然出现死循环。
(2)从进程状态来看。一组进程处于死锁则它们都处于阻塞状态, 即它们都没有占用CPU运行;而死循环的程序则始终占用CPU运行。
(3)从产生的原因看。死锁是由于操作系统采用多道程序的并发执 行与进程之间对不可抢占资源的共享引起的,即与操作系统的管理和控 制有关;而死循环则是因程序员的程序设计不当或编写错误造成的。
可见,死锁与程序的死循环是两个完全不同的概念,彼此之间没有 任何关系。