当前位置: 首页 > news >正文

死锁的处理策略-死锁的检测和解除

这两个是允许死锁发生的方法

死锁的检测

为了能对系统是否已经发生了死锁进行检测,必须:

1.用某种数据结构来保存资源的请求和分配信息;

2.提供一种算法。利用上述的信息来检测系统是否已经进入了死锁状态

数据结构资源分配图

两种节点:

进程节点:对应一个进程
资源节点:对应一类资源,一类资源可能有多个个数

两种边:

进程节点-》资源节点:表示想要申请几个资源,每一条边代表一个

资源节点-〉进程节点:表示已经分配了几个资源,每一条边代表一个

如果系统中剩余的可用资源数足够满足进程的需求,那么这个进程暂时不会阻塞,可以顺利执行下去。

如果这个进程执行结束了吧资源归还给系统,就可能使某些正在等待资源的进程被激活,并顺利执行下去

如果按照上述的过程分析可以消除所有的变,那么就称这个图是可完全简化的。此时一定没有发生死锁(相当于能找到一个安全序列)

如果最终不能消除所有的边,那么此时就发生了死锁

最终还连着边的那些进程就是处于死锁状态的进程


检测死锁的算法:

1.在资源分配图中,找出几步阻塞又不是孤点点进程Pi(即找出一条有向边与它相连,且该有向边对应资源的申请数量小于系统中已经有的空闲资源数量)

消去它所有的请求边和分配边,使之成为孤立的节点

2.进程所释放的资源可以唤醒因为等待这些资源而阻塞的进程,原来的阻塞进程可能变为非阻塞进程

死锁定理

如果某时刻系统的资源分配图是不可完全简化的,那么此时系统死锁

死锁的解除

一旦检测出死锁的发生,就应该立刻解除死锁

1.资源剥夺法。挂起某些死锁进程,并抢占它的资源,把这些资源分配给其他死锁进程,但是应放置被挂起的进程长时间得不到资源而饥饿

2.撤销进程法(终止进程法)。强制撤销部分,甚至全部的死锁进程,并剥夺这些进程的资源。虽然实现简单,但是付出的代价很大,有些可能快要执行结束了,你一断开,又要从头再来

3.进程退回法。让一个或多个死锁进程退回到足以避免死锁的地步,这就要求系统记录进程的历史信息,设置还原点

http://www.jsqmd.com/news/6315/

相关文章:

  • 实用指南:上下文工程驱动智能体向 “连续性认知”跃迁
  • 实用指南:基于STM32单片机的OneNet物联网粉尘烟雾检测系统
  • springboot3 mybatis 数据库操控入门与实战
  • 解决winform调用wpf窗体时原窗体缩小的问题
  • C# invoke C++ method
  • 本土化优势凸显:Gitee如何成为中国开发团队的效率引擎
  • Linux系统OOM终止Oracle进程
  • 实用指南:《C++进阶之C++11》【可变参数模板 + emplace接口 + 新的类功能】
  • Filebeat写ElasticSearch故障排查思路(上) - 教程
  • 告别 “一刀切” 管理!MyEMS 为不同行业定制专属能源优化方案
  • 「突发奇想,灵光乍现」 - hello
  • BST(self saved)
  • jenkins 用户权限 管理配置
  • DirectX- DLL修复工具 免费下载!绿色单文件版!安装使用教程
  • 测试集成CI/CD的五大实践:构建高效质量保障体系
  • Windows系统Web UI自动化测试学习系列4--开源体系平台测试项目环境部署搭建
  • DirectX修复工具官方中文增强版下载!下载安装教程(附安装包),0xc000007b错误解决办法
  • kuboard使用的etcd空间清理(3个etcd)
  • Node生态中最优雅的数据库事务处理机制
  • 详细介绍:扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)
  • 死锁的处理策略-预防死锁
  • 跨网文件安全交换系统:提升数据传输安全性和合规性
  • ArcGIS 公众号推荐
  • 跨网文件交换系统:数字化时代企业与机构的数据安全传输利器
  • 缩放 div
  • Redis从零讲解 - 详解
  • 【2025-09-29】团队合作
  • 杂凑算法学习笔记
  • pg库支持扩展postgis
  • kuboard部署启用3个etcd(k8s单个master)