文章目录
2. 死锁
2.1 死锁的必要条件
-
互斥
资源必须处于非共享模式,即因此只能有一个进程访问。如果有另一个进程申请该资源,那么必须等到该资源被释放为止。
-
占有且等待
指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但又对自己已获得的资源保持不放。
-
不可抢占
已经分配给一个进程的资源不能强制地被抢占,它只能被占有它的进程主动释放。
-
循环等待
若干进程之间形成一种头尾相接的循环等待资源的关系(如A等待B,B等待C,C等待A)
只有同时满足这四个必要条件,才会发生死锁。
2.2 死锁预防
死锁预防是采用某种策略,限制并发进程对资源的请求,从而使得死锁的必要条件在系统执行的任何时间上都不满足。
只要破坏任何一个死锁的必要条件,就可以预防死锁的发生。但是一般比较实用的是通过破坏第二个和第四个必要条件入手。
-
破坏互斥条件
对于只读文件、磁盘等资源可采用这种办法处理。但往往有很多资源是不能同时访问的 ,所以这种做法在大多数的场合是行不通的。
-
破坏占有且等待条件——一次性申请全部资源(静态分配策略)
一个进程必须在执行前就申请到它所需要的全部资源,并且直到它所要的资源都得到满足之后才开始执行。
这个方法的缺点是可能导致资源利用率和进程并发性降低。因为在每个进程所占有的资源中,有些资源是在比较靠后的执行时间里采用的,甚至有些资源是在额外的情况下才使用的,这样就可能造成了一个进程占有了一些几乎不用的资源而使其他需要该资源的进程产生等待的情况。
-
破坏不可抢占条件
这是