死锁

简介: 每个进程无限等待被该组进程中另一进程占有的资源;与之对比,活锁为先加锁再轮询不阻塞不推进,饥饿是由于资源分配策略如优先级导致得不到资源

 

是什么

每个进程无限等待被该组进程中另一进程占有的资源;与之对比,活锁为先加锁再轮询不阻塞不推进,饥饿是由于资源分配策略如优先级导致得不到资源

死锁条件:

  1. 互斥使用(资源独占)
  2. 占有且等待(部分分配)
  3. 不可抢占(不可剥夺)
  4. 循环等待(进程等待环路)

死锁定理

在资源分配图中,无环路必无死锁,有环路可能有死锁,有环且资源类只包含一个实例必有死锁

死锁预防,破坏死锁必要条件

  1. 独占转为共享资源
  2. 一次性申请和分配
  3. 主动释放部分分配
  4. 操作系统帮助抢占
  5. 资源有序分配法(资源按热度编号,进程按资源号增序请求)

死锁避免

对进程发出的每一个能满足的资源申请进行动态检查,根据分配后系统是否为不安全状态(死锁)决定是否分配

解决死锁

  1. 鸵鸟算法(不考虑死锁)
  2. 死锁预防(静态分配)
  3. 死锁避免(动态评估)
  4. 死锁检测和解除

安全序列

进程序列中任意进程,它还需要的资源不超过当前系统剩余资源与它之前的所有进程占有资源的和;此时系统为安全状态,一定无死锁,若不存在任何安全序列则为不安全状态,一定导致死锁

相关文章
|
JavaScript 前端开发 API
详解React与Vue的性能对比
详解React与Vue的性能对比
565 0
|
存储 缓存 前端开发
muduo高性能异步日志库的实现
muduo高性能异步日志库的实现
443 0
|
11月前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
352 9
|
11月前
|
数据采集 C# 数据库
数据验证与错误处理:C#中的实践
【10月更文挑战第1天】在软件开发中,数据验证与错误处理至关重要,不仅能提升程序的健壮性和安全性,还能改善用户体验。本文从基础概念入手,详细介绍了C#中的数据验证方法,包括使用自定义属性和静态方法验证数据,以及常见的错误处理技巧,如Try-Catch-Finally结构和自定义异常。通过具体示例,帮助读者掌握最佳实践,构建高质量应用。
315 3
|
分布式计算 搜索推荐 MaxCompute
基于OpenSearch向量检索版的多主体识别最佳实践
本文将介绍如何通过OpenSearch向量检索版,在图像搜索服务中进行多主体识别。
136366 9
|
Ubuntu 前端开发 Linux
Ubuntu防火墙命令大集合
【7月更文挑战第13天】
456 1
Ubuntu防火墙命令大集合
|
数据中心
VXLAN涉及跨DC,MTU如何规划?
VXLAN涉及跨DC,MTU如何规划?
259 0
|
前端开发
Bootstrap 5 保姆级教程(十):导航栏 & 轮播
Bootstrap 5 保姆级教程(十):导航栏 & 轮播
|
数据采集 人工智能 监控
客户管理和运营太难了?瓴羊×阿里云上的Salesforce给出更符合中国企业体质的解法
在数字化时代,消费者行为变化和数据爆炸性增长促使企业转向CRM升级。瓴羊通过与Salesforce合作,推出Quick Service和Quick Audience工具,应对多渠道数据整合与个性化营销的挑战。Quick Audience增强CRM的数据收集和分析,提供精准客户画像,而Quick Service提升客服效率,通过AI增强客服交互。这两款工具预集成于阿里云上的Salesforce,助力企业实现更高效、精准的客户管理和营销。随着新技术发展,AI等工具将在客户管理中发挥更大作用,推动商业模式创新。
222 0
|
JavaScript 前端开发 搜索推荐
从零开始:用Python和Vue开发个人博客
【4月更文挑战第10天】本文指导无技术背景的读者使用Python和Vue从零开始搭建个人博客。选择Python的Django框架因其易学和高效,通过环境搭建、创建Django项目和应用、定义数据模型、构建Vue前端、整合前后端及部署博客等步骤,逐步实现个人博客的建立。这个过程不仅帮助你分享知识和观点,同时也助力提升编程技能。
308 5

热门文章

最新文章