知识归纳:死锁

article/2025/10/31 0:46:52

一. 死锁定义

        死锁(Deadlock)是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。

举例:毕业生找工作,公司表示只需要有工作经验才可以来;要想有工作经验,就需要去公司工作......

二.产生死锁的条件

        1.互斥性:线程对资源的占有是排他性的,一个资源只能被一个线程占有,直到释放。

        2.请求和保持条件:一个线程对请求被占有资源发生阻塞时,对已经获得的资源不释放。

        3.不可抢占:一个线程在释放资源之前,其他的线程无法剥夺占用。

        4.循环等待:发生死锁时,线程进入死循环,永久阻塞。

三.预防死锁

在编写程序的时候,针对死锁条件进行预防:

1) 破坏“请求和保持”条件

        a. 进程在执行前必须一次性申请完所有执行期间所需资源

        b. 进程提出申请资源前需要释放所有资源

2) 破坏“不可抢占”条件

        a.申请资源时,如果有,则申请成功;如果无,则释放所有资源

        b.申请资源时,如果有,则申请成功;如果无,则抢占拥有该资源且处于等待状态的线程的该资源

3) 破坏“循环等待”条件

        将资源编号,每个线程只能按递增顺序申请资源,若需要低序号的资源,则需要释放当前所拥有的资源

四.避免死锁

若程序已经编写完毕,无法进行预防了,采用银行家算法避免死锁

银行家算法:保证每次分配资源后程序都处于安全状态

简单理解:

        安全状态:当前至少有一个进程可以用剩余的资源完成运行

        当一个进程申请某一项资源,若无该资源,拒绝该申请;若有,假设将该资源分配给了该程序,然后判断当前是否处于安全状态,若不处于,则拒绝该申请,若处于安全状态,则通过该申请

五.死锁检测

        构建资源分配图:将进程和资源画在一张图上;进程每需要一项资源,则从进程引出一条有向边指向相应的资源,进程每成功申请到一项资源,则从资源引一条有向边指向进程

举例(来源于知乎):进程P1,P2, 资源R1有3个, R2有2个,P1已经申请了2个R1,请求1个R2,P2已经申请了1个R1和1个R2,需要1个R1

死锁定理:

        1)在资源分配图中,找出既不阻塞又不孤点的进程P(既找出一条有向边与它相连,且该有向边对应的资源的申请量小于等于系统中已有的空闲资源数量),消去它所有的请求边和分配边,使之成为孤立的节点。

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

举例(来源于知乎):

 若简化后的资源分配图依旧存在环,则存在死锁

六.解除死锁

        1)资源剥夺法。将一些死锁进程暂时挂起来,并且抢占它的资源,并将这些资源分配给其他的死锁进程 ,要注意的是应该防止被挂起的进程长时间得不到资源而处于资源匮乏的状态

        2)撤销进程法。强制撤销部分甚至全部死锁并剥夺这些进程的资源。撤销的原则可以按照进程优先级和撤销进程的代价高低进行。

        3)进程回退法,让一或多个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非被剥夺。这个方法要求系统保持进程的历史信息,并设置还原点。

资料:

处理死锁的四种方法

操作系统:银行家算法 

操作系统:死锁的检测与解除 

死锁产生的原因及解决方法 


http://chatgpt.dhexx.cn/article/tANyoWjX.shtml

相关文章

mmall数据库学习笔记

mmall数据库学习笔记 文章目录 mmall数据库学习笔记唯一索引产品表购物车表支付信息表订单表订单明细表收货地址表外键 唯一索引 在用户表中,设置了用户名作为唯一索引,理由如下:用户名是不允许重复的,那么当不是分布式开发的时候…

MMALL ADMIN 后台管理总结

后台管理项目前期准备 1,vue-cli2 项目框架 2,下载axios插件 cnpm install axios,安装Element.ui , vue-cli2中使用scss 注意版本 cnpm install sass-loader7.1.0 --save-dev (8.0.0) v…

mmall项目安装相关包文件

2019独角兽企业重金招聘Python工程师标准>>> 本步骤之前请先:建立相关文件夹(或者从git上clone项目下来),进入分支作业目录下运行个忠包文件的安装。注意:npm是所有安装的第一步 基础安装: 1.np…

mmall电商项目学习笔记之 idea,maven工程整合ssm框架

项目目录结构 1.pom文件导入jar包 1.1 <properties><!--设置编码格式--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!--sprin…

Demo_mmall v2.0 (四) Tomcat集群演进及使用Redis进行session重构实现单点登录

小谈mmall架构演进 上回书和上上回书说到redis的用法还有在代码里怎么操作Redis数据库&#xff0c;学完了得用啊。怎么用啊&#xff1f;这得从项目架构说起了。 mmall是一个简单的用SSM搭建起来的基本只能本地玩耍的电商DEMO&#xff0c;最简单的架构版本V1.0是这样婶的&#…

自学实践前后端项目4 MMall商城 2

一。搭建静态页面 1)UserController里面实现登录操作 Autowired private UserService userService;PostMapping("/login") public String login(String loginName, String password, HttpSession session){QueryWrapper wrapper new QueryWrapper();wrapper.eq(&q…

mmall用户模块

mmall用户模块 user数据表设计用户模块接口文档服务端响应对象&#xff08;ServerResponse< T>&#xff09;响应对象封装以下3个属性判断响应是否成功私有化构造函数&#xff0c;对外暴露静态方法返回所需要的响应对象&#xff0c;例如&#xff1a;响应成功响应失败 Resp…

自学实践前后端项目4 MMall商城 7

一。地址管理 1.前端改为 userAddress 2. OrderController增加两个需要的元素 3.接口 服务也加上去 4. 在OrderServiceImpl实现层判断是否为新地址再进行保存 //先判断新老地址 if (orders.getUserAddress().equals("newAddress")){//存入数据库UserAddress use…

自学实前后端践项目4 MMall商城 1

一.开发环境 1.JDK8以上Spring Boot 2.3.0ThymeleafMyBatis Plus3.3.1MySQL8.0 2.部署&#xff1a;Linux,&#xff0c;&#xff08;阿里云 腾讯云&#xff09;JDK8&#xff0c;MySQL8.0 3.部署方式&#xff1a;jar包部署&#xff0c;不需要Tomcat 二.新建工程 1&#xff0…

mmall电商项目学习笔记之mybatis三剑客

一.Mybatis plugin IDEA 2017.3版本下Mybatis plugin 3.53安装使用 插件下载地址 http://www.awei.org/download/iMybatis-3.21.jar 二.MyBatis-Generate 反向生成 【转】mybatis自动生成实体代码的插件 【method2】逆向生成 2.1 在pom.xml中做两处配置 2.1.1配置depen…

自学实践前后端项目4 MMall商城 4

一。实现商品详情展示 1.测试获取后台当个商品的信息 2.实现通过点击商品名称和商品图片进入商品详情页面 1&#xff09;查找出商品信息 2&#xff09;在前端进行映射 3&#xff09;设置库存选择限制 判断逻辑 $(function(){//给type绑定点击事件$(".type").click…

mmall 项目实战(一)项目初始化

1.创建 数据库 及 表 数据脚本&#xff1a; /* Navicat Premium Data Transfer Source Server : 182.92.82.103 Source Server Type : MySQL Source Server Version : 50173 Source Host : 182.92.82.103 Source Database : mmall Target Se…

B2C购物商城---MMALL商城概览

注意&#xff1a; 商品小图原图缺失后续上传到图片服务器。不影响使用支付宝二维码是支付宝沙箱开发环境生成&#xff0c;不会产生真实交易&#xff0c;若需体验&#xff0c;请下载支付宝沙箱版扫描体验项目仍需优化 本项目的完成参考了慕课网happymmall的设计 项目源码在&…

MMall项目完整分析总结

Linux服务器 线上环境&#xff1a; 1.jdk 2.vsftpd 3.nginx 4.mysql 5.tomcat 6.git 7.maven 8.Redis 项目采用Tomcat集群方式: 在此架构图中&#xff0c;nginx使用的是轮询的负载均衡策略。session不交给tomcat自己管理&#xff0c;已经交由左侧的redis分布式…

python flask-sqlalchemy flask-marshmallow基本使用

首先安装 pip install marshmallow-sqlalchemy pip install flask-sqlalchemy pip install flask-marshmallow 参考 sqlalchemy query 官网 app.py文件内容 from flask import Flask,jsonify import config from flask_sqlalchemy import SQLAlchemy from flask_marshmallow i…

Flask_使用flask_marshmallow序列化数据

代码如下&#xff1a; from flask import Flask from flask_marshmallow import Marshmallow from flask_sqlalchemy import SQLAlchemy from marshmallow import fieldsapp Flask(__name__) app.config["SQLALCHEMY_DATABASE_URI"] "mysqlpymysql://root:12…

【Python】Marshmallow:Python中的“棉花糖”

博主&#xff1a;&#x1f44d;不许代码码上红 欢迎&#xff1a;&#x1f40b;点赞、收藏、关注、评论。 文章目录 一、Marshmallow简介1.1、基础概念 二、序列化2.1、User类2.2、UserSchema类2.3、Serializing(序列化)2.4、运行2.5、过滤输出 三、反序列化四、验证数据4.1、V…

marshmallow——简介

一、marshmallow简介 在marshmallow诞生之前,已经有很多优秀的模块来用于数据的格式化和数据校验中。 因此书写mashmallow这个库的作者受这些库的启发,例如Django REST Framework, Flask-RESTful, 和colander这些。他同样从这些库中大量借用了设计和实现序列化、反序列化以及…

flask---》Marshmallow介绍及基础使用

0. Marshmallow背景介绍 介绍 Marshmallow&#xff0c;中文译作&#xff1a;棉花糖。是一个轻量级的数据格式转换的模块&#xff0c;也叫序列化和反序列化模块&#xff0c;常用于将复杂的orm模型对象与python原生数据类型之间相互转换。一般用于flaskmarshmallow提供了丰富的…

YApi接口平台-接口挡板

YApi是一个开源的平台&#xff0c;官方平台链接&#xff0c;如下https://hellosean1025.github.io/yapi/index.html,目前很多大公司在使用&#xff0c;主要优势我认为有2个&#xff0c;第一该平台开源&#xff0c;搭建方便&#xff1b;第二该平台解决了前后端分离开发的痛点&am…