第二章 进程与线程 十九、死锁的概念

news2024/11/18 12:34:10

目录

一、定义

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

三、死锁的必要条件

四、死锁的处理策略

五、总结


一、定义

死锁是指两个或多个进程等待对方释放自己所持有的资源,导致所有进程都被阻塞,无法继续执行。这种情况可能会导致系统瘫痪,需要通过手动干预才能解除死锁。

通常,死锁发生在以下场景中:

  1. 多个进程同时占用共享资源,例如内存、文件等;
  2. 进程按照特定顺序申请资源,但顺序不当,可能导致资源被占用而无法释放;
  3. 进程之间存在相互依赖,例如一个进程需要另一个进程所持有的资源才能继续执行,而另一个进程同样需要该进程所持有的资源才能继续执行。

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

死锁、饥饿和死循环是计算机系统中常见的问题,它们的区别如下:

  1. 死锁:是多个进程或线程因竞争资源而陷入的僵局,即互相等待对方释放所持有的资源,导致所有进程或线程都无法继续执行。死锁是一种不可避免的系统问题,需要通过算法等手段来避免或解决。

  2. 饥饿:是指一个或多个进程长时间得不到需要的资源,导致无法正常执行。这种情况通常是由于资源分配不合理或调度算法不当所致。饥饿虽然不会导致系统瘫痪,但会影响系统的稳定性和性能。

  3. 死循环:是指进程或线程在执行中出现无限循环的情况,导致无法执行其他的代码。死循环通常是由于编码错误或算法问题所致。尽管死循环不会导致系统崩溃,但会浪费系统的资源,降低系统的响应速度。

三、死锁的必要条件

死锁的必要条件有四个,称为“死锁的铁四律”:

  1. 互斥条件:一个资源每次只能被一个进程使用;
  2. 请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;
  3. 不剥夺条件:进程已获得的资源,在未使用完之前,不能被其他进程强行抢占,只能由进程自己释放;
  4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源的关系。

只有当这四个条件同时满足时,才会产生死锁。

产生死锁的条件是,当多个进程在占用某些资源的同时,它们又同时请求另外一些资源,而这些资源被其它进程所占用,从而被阻塞。这样,所有进程都在等待其它进程释放它们所需要的资源,形成了一个死循环,被称为死锁。

注意:发生死锁时一定有循环等待,但是循环等待不一定会产生死锁。

四、死锁的处理策略

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

五、总结

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(二)实现Bean属性依赖注入功能【手撸Spring】

一、前言 在上一篇手撸Spring之实现一个简易版IoC容器,我们先把最简单的IoC架子搭了起来,即实现了一个Bean的注入,体会了依赖反转的过程。这里提到的依赖反转,大家肯定非常耳熟了,也就是将业务对Bean的依赖反转了&…

【网络】网络编程——带你手搓简易TCP服务端(echo服务器)+客户端(四种版本)

这里写自定义目录标题 前言正式开始用生活中的例子来讲解TCP服务端和客户端代码讲解服务端基本框架创建套接字 bindlisten监听accept接收连接通信单线程版多进程①版多进程②版多线程版线程池版 客户端 收尾 前言 本篇主要讲解套接字编程,以TCP服务端和客户端为主…

MySQL为什么用b+树

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在[1,2,3,4]中找到4这个数据,直接对全数据检索也很快&am…

SP605官方开发板不能扫到链的问题

很早之前的板子,近些天需要重新搞FPGA,所以又拿出来,应该以前都是在win7下开发,现在都win10了,vivado都不支持sp6,所以先得下载一个14.7版本,但是出现了新的问题,就是不能扫到链。 …

windows认证机制_NTLM

文章目录 概念本地认证 NTLMLMNTML原理网络认证 Net NTLM实际测试利用hash传递浏览上传⽂件使用 mimikatz hash传递获取域控RDPmimikatz工具使用案例 概念 原文参考:xiu --》http://www.xiusafe.com/ 域渗透就是基于 windows 域环境的渗透,而域渗透涉及…

第二证券:中概股,昨夜狂飙!

当地时间10月10日,美股三大股指集体收高,其间道指涨0.40%,标普指数涨0.52%,纳斯达克指数涨0.58%。多位美联储官员鸽派讲话支撑不再加息,投资者等待美联储9月会议纪要、美国CPI通胀数据及企业三季报等要素支撑美股持续走…

基于Docker来部署Nacos的注册中心

基于Docker来部署Nacos的注册中心 准备MySQL数据库表nacos.sql,用来存储Nacos的数据。 最终表结构如下: 在本地nacos/custom.env文件中,有一个MYSQL_SERVICE_HOST也就是mysql地址,需要修改为你自己的虚拟机IP地址: …

铝型材公司【Brilliance Group】申请1080万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于新加坡的铝型材公司【Brilliance Group】近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(KHIW),Brilliance…

python爬虫练手项目之获取某地企业名录

因为很多网站都增加了登录验证,所以需要添加一段利用cookies跳过登陆验证码的操作 import pandas as pd import requests from lxml import etree # 通过Chrome浏览器F12来获取cookies,agent,headers cookies {ssxmod_itna2:eqfx0DgQGQ0QGDC…

python每日一练(5)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

网页报错 Uncaught TypeError: a(...).tooltip is not a function

网页报错 Uncaught TypeError: a(…).tooltip is not a function 网页上f12看了一下控制台有一个报错 :Uncaught TypeError: a(…).tooltip is not a function 排查查找了一下原因,是网页嵌套,报错原因是引入了两次jquery,注释掉…

数学建模、统计建模、计量建模整体框架的理解以及建模的步骤

数学建模、统计建模、计量建模整体框架的理解以及建模的步骤 引言正文模型的设定模型的估计建模中可能遇到的四种数据类型 模型的检验模型的应用 最后 引言 这篇博客主要写给统计或者数学专业的小白,以供快速上手建模比赛;本人将在这里整合参加建模比赛…

基于nodemailer实现邮件发送

概述 node中可用nodemailer实现邮件的发送。本文使用QQ邮箱实现邮件的发送。 实现效果 实现 1. QQ邮箱配置 首先需要开启POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,如下图所示。 生成授权码 2. 发送邮件 发送邮件的代码比较简单,如下&#xf…

197、管理 RabbitMQ 的虚拟主机

开启Rabbitmq的一些命令: 小黑窗输入: rabbitmq-plugins enable rabbitmq_management 启动控制台插件, 就是启动登录rabbitmq控制台的页面,rabbitmq_management 代表了RabbitMQ的管理界面。 rabbitmq-server 启动rabbitMQ服务器…

Jetson Orin NX 开发指南(5): 安装 OpenCV 4.6.0 并配置 CUDA 以支持 GPU 加速

一、前言 Jetson 系列的开发板 CPU 性能不是很强,往往需要采用 GPU 加速的方式处理图像数据,因此本文主要介绍如何安装带有 GPU 加速的 OpenCV,其中 GPU 加速通过 CUDA 来实现。 参考博客 Ubuntu 20.04 配置 VINS-Fusion-gpu OpenCV 4.6.…

分布式锁3:基于redis的插件redission实现分布式锁

一 redision简介 1.1 redission介绍 Redisson分布式锁是一种基于redis实现的分布式锁,它利用redis的setnx命令实现分布式锁的互斥访问。同时还支持锁的自动续期功能,可以避免因为某个进程崩溃或者网络故障导致锁无法释放的情况。 只要线程一加锁成功…

Java8实战-总结41

Java8实战-总结41 用Optional取代nullOptional 类入门应用 Optional 的几种模式创建 Optional 对象使用 map 从 Optional 对象中提取和转换值 用Optional取代null Optional 类入门 Java 8中引入了一个新的类java.util.Optional<T>。这是一个封装Optional值的类。举例来…

数据库基础(一)

数据库面试基础 注&#xff0c;本文章内容主要来自于JAVAGUIDE&#xff0c;只是结合网上资料和自己的知识缺陷进行一点补充&#xff0c;需要准备面试的请访问官方网址。 一、范式 参考链接 函数依赖&#xff1a;一张表中&#xff0c;确定X则必定能确定Y&#xff0c;则X->…

Factory-Method

Factory-Method 动机 在软件系统中&#xff0c;经常面临着创建对象的工作&#xff1b;由于需求的变化&#xff0c;需要创建的对象的具体类型经常变化。如何应对这种变化&#xff1f;如何绕过常规的对象创建方法(new)&#xff0c;提供一种“封装机制”来避免客户程序和这种“具…

【JQuery插件】手把手教你如何白瓢一个网站的全部付费资源!前端狂喜

视频讲解地址&#xff1a;https://www.bilibili.com/video/BV1bm4y157GF/ 网站地址&#xff1a;https://www.jq22.com/ 大家好&#xff0c;这一集给大家分享一个好用的JQuery插件网站&#xff0c;当然&#xff0c;更主要的是教大家如何白瓢这个网站上的资源&#xff0c;这个网…