死锁的例题

3.3.2  例题解析(2)

【例3-3-13】某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台。当N的取值不超过时,系统不会发生死锁。

A. 4 B. 5 C. 6 D. 7

解:当每个进程都获得了2台打印机且系统中剩余打印机不少于1台时,系统不会发生死锁,即11-2N≥1,由此知N≤5。本题答案为B。

【例3-3-14】银行家算法在解决死锁问题中是用于的。

A. 预防死锁 B. 避免死锁 C. 检测死锁 D. 解除死锁

解:银行家算法用于避免死锁。本题答案为B。

【例3-3-15】某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是。

A. 9 B. 10 C. 11 D. 12

解:因系统中存在3个进程,且都需要同类资源4个,当系统中资源数等于10时,无论怎样分配资源,其中至少有一个进程可以获得4个资源,该进程可以顺利运行完毕,从而可以将分配给它的资源归还给系统,其他进程也能顺利执行完成。若系统中资源数小于10,不妨设系统中有9个资源且每个进程都已获得3个资源,此时系统中已无空闲资源,当其中的任何一个进程再次申请资源时将进入等待状态,其他进程的情况类似,此时出现死锁。本题答案为B。

【例3-3-16】在下列解决死锁的方法中,属于死锁预防策略的是。

A. 银行家算法   B. 有序资源分配法

C. 死锁检测法   D. 资源分配图化简法

解:有序资源分配法是死锁预防策略。本题答案为B。

【例3-3-17】死锁定理是用于处理死锁的方法。

A. 预防死锁B. 避免死锁 C. 检测死锁 D. 解除死锁

解:死锁定理是用于检测死锁的方法。本题答案为C。

【例3-3-18】以下关于预防死锁的论述中正确的是。

A. 由于产生死锁的基本原因是系统资源不足,因而预防死锁的有效方法是根据系统规模配置足够的系统资源

B. 由于产生死锁的另一种基本原因是进程推进顺序不当,因而预防死锁的有效方法是使进程的推进顺序合法

C. 因为只要系统不进入不安全状态,便不会产生死锁,故预防死锁的有效方法是防止系统进入不安全状态

D. 可以通过破坏产生死锁的4个必要条件之一或其中几个的方法来预防发生死锁

解:D。

2. 填空题

【例3-3-19】计算机系统产生死锁的根本原因是   ①   和   ②   。

解:本题答案为:①资源有限  ②操作不当。

【例3-3-20】目前抢占式的分配策略只适合于   ①   和   ②   。

解:本题答案为:①主存空间 ②CPU。

【例3-3-21】两个进程争夺同一个资源时,产生死锁。

解:两个进程争夺同一个资源时,不一定产生死锁,这与它们申请资源的顺序有关。本题答案为:不一定。

【例3-3-22】产生死锁的4个必要条件是   ①   、   ②   、   ③   和   ④   。

解:本题答案为:①互斥条件 ②不可剥夺条件 ③请求与保持条件 ④循环等待条件。

【例3-3-23】解决死锁的方法分为   ①   、   ②   、   ③   和   ④   。

解:本题答案为:①死锁的预防 ②死锁的避免 ③死锁的检测 ④死锁的解除。

【例3-3-24】避免死锁的实质是。

解:本题答案为:如何使系统不进入不安全状态。

【例3-3-25】只要能保持系统处于安全状态就可的发生。

解:本题答案为:避免死锁。

【例3-3-26】当若干进程需求资源的总数大于系统能提供的资源数时,进程间就会出现竞争资源的现象,如果对进程竞争的资源就会引起死锁。

解:本题答案为:管理或分配不当。

【例3-3-27】如果资源分配图中有环路,且每个资源类中只有一个资源,则环路中的进程都。

解:本题答案为:处于死锁状态。

【例3-3-28】如果操作系统能保证所有的进程在有限时间内得到需要的全部资源,则称系统处于。

解:本题答案为:安全状态。

  • 7
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是指两个或多个进程在互斥地请求资源的时候,由于资源被占用而无法继续执行,导致所有进程都被阻塞的情况。在Spring Boot中,可能发生在多线程并发访问共享资源时,例如数据库连接池、缓存、等。 在给出解决方案之前,我们需要先排查问题。一种常用的排查问题的方法是使用jstack命令输出线程的堆栈信息。通过查看堆栈信息,我们可以定位到可能引起的代码行,并进行解决修复。 下面是一个示例代码,模拟了一个可能导致的场景: ```java package com.xz.springboottest.day1; public class DeadLock { private static final String ACTION_ONE = "拿起碗"; private static final String ACTION_TWO = "拿起筷子"; public static void main(String[] args) { // 哲学家小明 new Thread(() -> { synchronized (ACTION_ONE) { try { Thread.sleep(1000); synchronized (ACTION_TWO) { System.out.println("小明开始吃饭了。。。。。。"); } } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); // 哲学家小张 new Thread(() -> { synchronized (ACTION_TWO) { try { Thread.sleep(1000); synchronized (ACTION_ONE) { System.out.println("小张开始吃饭了。。。。。。"); } } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } } ``` 以上代码模拟了哲学家就餐的场景,当只剩下一只碗和一双筷子时,可能出现的问题。 对于解决的方法,可以考虑以下几种方案: 1. 避免循环等待:为了避免,可以规定所有线程在请求资源时按照固定的顺序获取,从而避免循环等待。 2. 加顺序:在多个线程同时请求多个资源的情况下,为了避免,可以约定线程必须按照相同的顺序请求资源。 3. 设置超时时间:在获取的时候设置超时时间,如果超过一定时间还未获取到,可以放弃或者重试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值