死锁与活锁

news/2025/4/2 5:08:30/

1 死锁概述

死锁主要是由于资源使用不当引发的。OS中存在很多不同类型的软硬件资源,而可以引发死锁的资源
主要是需要互斥访问的、不可被抢占的资源,即临界资源。下面先来简单了解下资源的分类。
资源分类
按照资源是否可重复使用划分,可以分为可重用资源与消耗性资源;按照资源在被使用过程中能否被抢
占划分,可以分为可抢占资源与不可抢占资源。

可重用资源

可重用资源是一种可供用户重复使用的资源。它具有如下性质:
每个可重用资源单元只能分配给一个进程使用,不允许多个进程共享
进程在使用可重用资源时,需按照“请求–>使用–>释放”顺序。若请求失败,则进行阻塞或忙等
系统中可重用资源单元数目是固定的,进程运行期间不能创建也不能销毁
计算机系统中大部分资源属于可重用资源。

消耗性资源

消耗性资源又称为临时性资源,是在进程运行期间由进程动态的创建与消耗的。它具有如下性质:
消耗性资源的单元数目在进程运行期间是不断变化的
进程在运行过程中可不断地创建消耗性资源单元
进程在运行过程中可不断申请消耗该资源单元,消耗完毕后无需再返回资源
典型的消耗性资源是用于进程通信的消息。

不可抢占资源

某资源被分配给某进程使用过程中,在该进程未主动出让的情况下,该资源使用权被其它进程剥夺。那
么该类型资源称为可抢占资源,例如,处理机、内存等属于可抢占资源。可抢占资源不会引发死锁。

死锁的定义

在这里插入图片描述
若一组进程中的每个进程都在等待“仅由该组进程中的其它进程才能引发的”事件,则该组进程是死锁
的,即Deadlock。

引发死锁的原因

为什么会出现死锁呢?主要有三个原因:

竞争不可抢占资源

系统中所拥有的不可抢占资源数量若不能满足多个进程运行的需要,使得进程在运行过程中会因争夺
资源而陷入僵局。

竞争可消耗资源

进程对于可消耗资源的创建与消耗过程设计不当,会使得进程的运行陷入等待的僵局。

进程推进不当

除了对资源的竞争可能会引发死锁外,进程在运行中对资源的申请与释放顺序不当也是引发死锁的一个
重要因素。

产生死锁的必要条件

一组进程在执行过程中能够发生死锁,其一定是同时具备了以下四个必要条件。

  • 互斥条件:一定存在对临界资源的竞争
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已经获得的资源保持不放
  • 不剥夺条件:进程对于已获得的资源,在未主动出让其使用权时不能强行剥夺
  • 循环等待条件:这组进程间形成了一种头尾相接的循环等待临界资源的关系

若要使进程在运行过程中不产生死锁,只需要打破这四个必要条件中任意一个即可。不过,一旦发生
了死锁,系统是无法自行解开的,只能通过外力干预解除。


http://www.ppmy.cn/news/69103.html

相关文章

SpringBoot统一功能处理

目录 springBoot拦截器 实现 统一用户登录权限验证1. 自定义拦截器2. 将自定义拦截器配置到系统配置项,并设置合理的拦截规则拦截器实现原理 统一异常处理统一数据格式返回 统一用户登录权限验证 统一数据格式返回 统一异常处理 springBoot拦截器 实现 统一用户登录…

2023最新CleanMyMac中文版系统清理优化工具

CleanMyMac中文版功能非常的强大,操作简单,使用起来高效快捷,软件自身拥有一个安全数据,且拥有一定的规格,CleanMyMac中文版能够确定软件能够正确选择和清理Mac垃圾文件,更加安全,可靠。一键快速…

【2023华为OD笔试必会25题--C语言版】《13 获得完美走位》——字符串、滑窗

本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的25道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…

Java入门和背景知识

🔥常见编程语言介绍🔥Java 发展史🔥Java 的核心优势🔥Java 各版本的含义🔥Java 的特性和优势🔥Java 运行机制🔥JVM、JRE 和 JDK🔥Java 开发环境搭建🔥openJDK 和 JDK 收费…

修复bug:FlexibleButton id相反问题

目录 版本:https://github.com/murphyzhao/FlexibleButton/releases/tag/2.0.1 问题现象 问题描述 查源码! 注册 读按键 按键处理 小结 版本:https://github.com/murphyzhao/FlexibleButton/releases/tag/2.0.1https://github.com/mur…

shell脚本——流编辑器“三剑客”之sed命令

shell脚本——流编辑器“三剑客”之sed命令 一、流编辑器“三剑客”二、sed编辑器1、sed的工作流程2、命令格式3、常用选项4、常用操作5、打印内容6、使用地址7、删除行8、替换9、插入 一、流编辑器“三剑客” sed awk grep 二、sed编辑器 sed是一种流编辑器,流编…

Liunx top 命令详解

文章目录 top补充说明语法选项top交互命令实例 top 显示或管理执行中的程序 补充说明 top命令 可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。 语法…

HttpClient

介绍 介绍 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 作用: 发送HTTP请求 接收响应数据 应用场景: …