首页 > 试题广场 >

哪项在多线程中不能避免发生死锁

[单选题]
哪项在多线程中不能避免发生死锁
  • 允许进程同时访问某些资源。
  • 允许进程强行从占有者那里夺取某些资源。
  • 进程在运行前一次性地向系统申请它所需要的全部资源。
  • 把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。
应该是题目错了。A应该是不能避免死锁的。
发表于 2019-01-27 17:32:01 回复(0)
更多回答

死锁:在多道程序设计环境下,多个进程可能竞争一定数量的资源,。一个进程申请资源,如果资源不可用,那么进程进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待的进程有可能无法改变状态,这种情况下称之为死锁。

死锁的四个条件:

互斥:至少有一个资源必须处在非共享模式,即一次只能有一个进程使用,如果另一进程申请该资源,那么申请进程必须延迟直到该资源释放为止。

占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有。

非抢占:资源不能被抢占
循环等待:有一组进程{P0,P1,...Pn},P0等待的资源被P1占有,P1等待的资源被P2占有,Pn-1等待的资源被Pn占有,Pn等待的资源被P0占有。

形成死锁必须要满足这四个条件。那么违背这几个条件中的任何一个就不会形成死锁,这种方式成为 死锁预防,而死锁避免是动态的检测分配资源的状态是否安全
- 死锁解决方式
1. 死锁预防
2. 死锁避免
3. 死锁检测并恢复
三者处理死锁的方式可以类比为:死锁预防,直接铲平坑;死锁避免,直接跳过坑;死锁检测并恢复,摔到坑里,修正一下继续前行。
对于互斥而言:有的资源本身就是互斥的,所以通常无法破坏这一必要条件。
对于占有并等待:破坏它,可以指定这样的规则(协议):每一个进程执行前一次性申请完所有资源。或者 每个进程申请当前所需要的资源,当需要使用其他资源时,需要把之前申请的资源释放掉。前者可以理解为破坏**等待**,后者可以理解为破坏**占有**。这样做使得资源得利用率很低(最后阶段可能需要用一下打印机,而将其在整个运行期占有);对于优先级低得进程来说,多次释放资源很容易造成它们饥饿。
对于非抢占:破坏它,即对于已经分配的资源可以进行抢占。当一个优先级比较低,那么它的资源往往会被优先级高得剥夺,导致它饥饿。
对于循环等待:对所有资源类型进排序,要求每个进程按照资源编号递增顺序申请资源。可以用反证法证明。简要描述一下,在进程按照资源编号递增顺序申请资源的条件下,假设一个循环等待存在,即有一组进程{P0,P1,...Pn},P0等待的资源被P1占有,P1等待的资源被P2占有,Pn-1等待的资源被Pn占有,Pn等待的资源被P0占有。那么Pi+1占有了Ri资源,同时又申请Ri+1,所以资源Ri的编号必然小于Ri+1,那么R0的编号小于R1的....Rn资源的编号小于R0资源的编号(Pn进程)。根据传递性,R0的编号小于R0的编号,显然矛盾,因此,在上述条件下,不会产生循环等待。

参考:《操作系统概念》

编辑于 2019-01-23 00:39:04 回复(1)
这题个人认为没有答案,A为产生死锁的一个原因,B为解除死锁的方法,CD为预防死锁的方法,C破坏‘请求与保持’条件,D破坏‘循环等待’条件。避免死锁的方法有银行家算法,但是选项中并没有。
发表于 2019-01-17 12:32:37 回复(0)
赛码网上这道题ABCD全选
发表于 2019-09-04 20:57:41 回复(0)
操作系统里面,BCD都是可行的解决方案,A不是。
发表于 2019-03-03 14:55:01 回复(0)
产生死锁的4个必要条件:
互斥条件:系统存在临界资源,存在一个资源每次只能被一个进程使用,若别的进程也要使用该资源,需要等待知道其占用者用完释放。
保持与等待条件:部分分配,允许进程在不释放其已经分得的资源的情况下请求并等待分配的资源
不可抢占条件:有些系统资源是不可抢占的,系即当某个进程已经获得这种资源后,系统是不能强行收回,其他进程也不能强行夺走,只能由自身使用完释放。
循环等待条件:若干个进程形成环形链,链中的每一个进程都在等待该链中下一个进程所占用的资源。
死锁的预防需要至少破坏死锁的4个必要条件之一,而死锁的避免不去刻意破坏4个必要条件,而是通过对资源的分配策略施加较少的限制条件,来避免死锁的产生。
选项B,破坏不可抢占条件,属于死锁预防
选项C,破坏了保持与等待条件,属于死锁预防
选项D,破坏了循环等待条件,属于死锁预防

发表于 2019-03-01 12:08:43 回复(2)
多个并发进程形成死锁的四个必要条件是 占有并等待, 循环等待,非抢占 和 互斥。
发表于 2019-01-15 11:18:43 回复(0)
这要是多选题,我就全选了

发表于 2020-08-05 17:08:21 回复(0)
我觉得选D 啊  D不是避免死锁?
发表于 2020-08-01 12:36:08 回复(0)
BCD是死锁预防的方案,题目中说的是避免,不太懂A,按操作系统中,死锁避免的方案应该是银行家算法。
发表于 2019-04-11 10:00:56 回复(1)
A的意思好像是让资源变为非互斥资源
发表于 2019-03-28 20:02:56 回复(0)
死锁的常见处理方法:
1)预防:通过破坏死锁发生条件,使系统不可能发生死锁;
2)避免:系统可能发生死锁,但是通过算法使系统避开不安全状态;
3)解除:系统运行时不加控制,只在发生死锁时及时解除死锁;
发表于 2019-03-03 14:50:28 回复(0)