死锁的概念

embedded/2024/11/13 5:31:43/

死锁的概念

  • 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是死锁
  • 发生死锁后若无外力干涉,这些进程都将无法向前推进

死锁、饥饿、死循环的区别

  • 死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象
  • 饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程饥饿
  • 死循环:某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑bug导致的,有时是程序员故意设计的

死锁产生的4个必要条件

  • 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁
  • 不剥夺条件:进程所获得的资源在未使用完成之前,不能由其他进程强行夺走,只能主动释放
  • 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占用,此时请求进程被阻塞,但又对自己已有的资源保持不放
  • 循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求

什么时候发生死锁

  • 对不可剥夺资源的不合理分配,可能导致死锁
  • 对系统资源的竞争
  • 进程推进顺序非法
  • 信号量的使用不当

死锁的处理策略

  • 预防死锁:破坏死锁产生的四个必要条件中的一个或几个
  • 避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
  • 死锁的检测和解除:允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁

http://www.ppmy.cn/embedded/89005.html

相关文章

Nginx常用命令(Linux)

Nginx常用命令(Linux) nginx 常用命令 whereis nginx //查找nginx安装位置Nginx 的参数包括: -c <path_to_config>:使用指定的配置文件而不是 conf 目录下的 nginx.conf -t:测试配置文件是否正确,用来检测所修改的配置文件是否有语法错误 -v:显示 nginx 版本号 …

人工智能幻觉:记忆能找到答案吗?

欢迎来到雲闪世界。探索记忆机制如何减轻大型语言模型中的幻觉。 幻觉是事实&#xff0c;不是错误&#xff1b;错误的是基于幻觉的判断。——伯特兰罗素 大型语言模型 (LLM)表现出色&#xff0c;但仍受到幻觉的困扰。特别是对于敏感应用来说&#xff0c;这不是一个小问题&#…

软件测试基础1--功能测试

1、什么是软件测试&#xff1f; 软件是控制计算机硬件运行的工具。 软件测试&#xff1a;使用技术手段验证软件是否满足使用需求&#xff0c;为了发现软件功能和需求不相符合的地方&#xff0c;或者寻找实际输出和预期输出之间的差异。 软件测试的目的&#xff1a;减少软件缺陷…

雅萌五代射频仪拆机图

雅萌五代射频仪拆机图&#xff0c;相对之前的版本&#xff0c;这个射频仪的头部电极部分&#xff0c;进行结构的优化&#xff0c;整个面比较平整光滑&#xff0c;不容易残留凝胶

排序算法:选择排序,golang实现

目录 前言 选择排序 代码示例 1. 算法包 2. 选择排序代码 3. 模拟排序 4. 运行程序 5. 从大到小排序 循环细节 外层循环 内层循环 总结 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行排序 假如 30 条数据进行排序 假设 5000 条数据&#xff0c;对比…

【界面开发实战】使用DevEco Studio编写支付宝首页

效果展示 知识点 层叠布局 上一篇文章已经介绍了&#xff0c;这篇文章中不再赘述&#xff0c;如果想了解的话可以去看上一篇文章&#xff0c;链接如下&#xff1a; http://t.csdnimg.cn/CnBZMhttp://t.csdnimg.cn/CnBZM 弹性布局 作用&#xff1a;提供更加有效的方式对容器…

webGL + WebGIS + 数据可视化

webGL&#xff1a; 解释&#xff1a;用于在浏览器中渲染 2D 和 3D 图形。它是基于 OpenGL ES 的&#xff0c;提供了直接操作 GPU 的能力。 库&#xff1a; Three.jsBabylon.jsPixiJSReglGlMatrixOsgjs WebGIS&#xff1a; 解释&#xff1a;用于在 Web 浏览器中处理和展示地…

LUA脚本改造redis分布式锁

在redis集群模式下&#xff0c;我们会启动多个tomcat实例&#xff0c;每个tomcat实例都有一个JVM&#xff0c;且不共享。而synchronize锁的作用范围仅仅是当前JVM&#xff0c;所以我们需要一个作用于集群下的锁&#xff0c;也就是分布式锁。&#xff08;就是不能用JVM自带的锁了…