Day19_java运算符_死锁

news/2025/3/21 0:45:28/文章来源:https://www.cnblogs.com/piphermitage/p/18784339

每日一题

题目
请解释死锁(Deadlock)的概念及其产生的必要条件,并说明常见的死锁处理策略及其优缺点。


问题分析

此问题考察对操作系统资源管理机制的理解,需深入分析死锁的成因、判定条件及解决方法。回答时需结合理论模型与实际策略,体现系统性思维。


参考答案

1. 死锁的定义

死锁指多个进程因竞争资源而陷入互相等待的僵局,若无外力干预,这些进程将无法继续推进。例如:

  • 进程A持有资源1并请求资源2,进程B持有资源2并请求资源1,双方均不释放已有资源,导致无限等待。

2. 死锁的四个必要条件

条件 说明 破坏方法示例
互斥访问 资源一次只能被一个进程独占使用(如打印机) 使用共享资源(如只读文件)
持有并等待 进程持有资源的同时请求其他资源 要求进程一次性申请所有资源(预分配)
不可剥夺 资源只能由持有者主动释放,不可强制收回 允许操作系统剥夺资源(如内存回收)
循环等待 存在进程资源的环形等待链(A→B→A) 强制按顺序申请资源(如资源排序法)

3. 死锁处理策略对比

策略 核心思想 优点 缺点
预防 破坏死锁的任一必要条件 完全避免死锁 资源利用率低(如预分配导致浪费)
避免 动态检查资源分配是否安全(银行家算法) 提高资源利用率 需预知最大资源需求,计算开销大
检测与恢复 定期检测死锁并解除(终止进程/回滚) 灵活,无运行时限制 检测算法复杂,恢复可能造成数据不一致
鸵鸟策略 忽略死锁(假设极少发生) 实现简单,适合特定场景 不适用于关键系统(如航天控制)

4. 典型应用场景

  • 预防策略:嵌入式实时系统(如汽车控制系统),需绝对避免死锁。
  • 银行家算法:云计算资源调度(动态分配虚拟机资源)。
  • 检测与恢复:数据库管理系统(通过事务回滚解决死锁)。
  • 鸵鸟策略:PC端单用户系统(如Windows早期版本)。

5. 深入扩展

  • 活锁(Livelock):进程不断改变状态但无法推进(如两人相让路),需引入随机退避机制。
  • 资源分配图(RAG):通过图论模型检测死锁,若图中存在环路且资源不可抢占,则判定死锁。
  • 分布式死锁:跨节点死锁检测需Chandy-Misra算法等,复杂度显著增加。

参考题目延伸

  • 编程题:如何用代码模拟死锁场景?(可要求写两个线程互相等待锁的Java/Python示例)
  • 设计题:若设计一个无人机编队控制系统,你会选择哪种死锁处理策略?为什么?

Java

package com.xiang.operator;public class Demo07 {public static void main(String[] args) {int a = 10;int b = 20;int c = 30;a += b; // a = a + ba -= b; // a = a - bSystem.out.println(a);// 字符串连接符   +System.out.println(a+b);System.out.println(""+a+b); // 1020 字符串在前会转换为字符串System.out.println(a+b+""); // 30 字符串在后则仍为数字System.out.println(a+c+""+b+c); // 402030}
}
package com.xiang.operator;public class Demo04 {public static void main(String[] args) {// ++   --  自增  自减  一元运算符int a = 3;int b = a++;    // a先赋值,再自增// a = a + 1;System.out.println(a);// a = a + 1;int c = ++a;    // a先自增,再赋值System.out.println(a);System.out.println(b);System.out.println(c);// 幂运算 2*2*2 = 8    很多运算会使用工作类来写double pow = Math.pow(3,2);System.out.println(pow);}
}

百词斩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902288.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[AI/AIGC/GPT] 提示词工程1概述篇

概述:提示词工程提示工程(Prompt Engineering)是一门较新的学科,关注提示词开发和优化,帮助用户将大语言模型(Large Language Model, LLM)用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解大型语言模型的能力和局限性。 研究人员可利用提示工程来提…

java综合开发-前后端分离-01前端html,css

java综合开发-前后端分离-01前端html,css[ 任务列表 ] 1.阶段目标 2.网页基础知识 3.html和css 4.html的常用标签 4.1. 标题标签:h1-h6 4.2. 图片标签:img 4.3. 水平分割线标签:hr 4.4. css的三种引入方式: 4.5. 颜色的三种表示形式: 4.6. css的三种选择器: 4.7. 无语义…

Unreal最佳实践——通过进程Hack资源

Q:接到一个需求说是要一个外部C++调用ReadProcessMemory 黑进UE的程序找到uimage的地址,然后把里面的png图片拷贝出来,一头雾水 A:ReadProcessMemory写过 A:进程的启动地址就是你的基址,不过UE的需要找到world基址,所有的world对象U指针基于world,如果不是world内的,直接…

数据、信息、知识、智慧:AI时代我们该如何思考?

时代的浪潮滚滚向前,AI技术的演进正悄然改变着我们认知世界和创造价值的方式。从数据、信息到知识、智慧,从大数据到大模型,从单一智能体到多智能体协作,这是一场深刻的认知革命,也是生产力解放的新纪元。 AI粉嫩特攻队,2025年3月15日。 最近跟几个朋友讨论AI发展,突然意…

3.20学习苍穹外卖

今天主要学习关于微信支付的流程问题 又微信官方文档和流程图整体来说十分复杂 不过通过一篇博客成功跳过这个问题 引文正真支付是需要部分密钥文件 黑马不会提供这个 所有无法实现 就是通过直接跳转到成功支付实现的这个功能 https://blog.csdn.net/XZY__one/article/details/…

GKI改造原则、机制和方法

Google在android11-5.4分支上开始要求所有下游厂商使用Generic Kernel Image(GKI),需要将SoC和device相关的代码从核心内核剥离到可加载模块中(下文称之为GKI改造),从而解决内核碎片化问题。GKI为内核模块提供了稳定的内核模块接口(KMI),模块和内核可以独立更新。本文…

鸿蒙特效教程07-九宫格幸运抽奖

鸿蒙特效教程07-九宫格幸运抽奖在移动应用中,抽奖功能是一种常见且受欢迎的交互方式,能够有效提升用户粘性。本教程将带领大家从零开始,逐步实现一个九宫格抽奖效果,适合HarmonyOS开发的初学者阅读。最终效果预览 我们将实现一个经典的九宫格抽奖界面,包含以下核心功能:3…

Ollama系列05:Ollama API 使用指南

本文是Ollama系列教程的第5篇,在前面的4篇内容中,给大家分享了如何再本地通过Ollama运行DeepSeek等大模型,演示了chatbox、CherryStudio等UI界面中集成Ollama的服务,并介绍了如何通过cherryStudio构建私有知识库。 在今天的分享中,我将分享如何通过API来调用ollama服务,通…

前端HTML+CSS+JS速成笔记

HTML 超文本标记语言。 单标签与双标签的区别 单标签用于没有内容的元素,双标签用于有内容的元素。 HTML文件结构 告诉浏览器这还是一个 Html 文件: <!DOCTYPE html>Html文件的范围: <html>...</html>Html 文件的头: <head>...</head>实际显…

12. ADC

一、ADC简介生活中接触到的大多数信息是醉着时间连续变化的物理量,如声音、温度、压力等。表达这些信息的电信号,称为 模拟信号(Analog Signal)。为了方便存储、处理,在计算机系统中,都是数字 0 和 1 信号,将模拟信号(连续信号)转换为数字信号(离散信号)的器件就叫模…

【刷题笔记】力扣 40. 组合总和 II——回溯算法中的去重

40. 组合总和 II 中等 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidates = [10,1,2,7,6,1,…