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

[面试] 什么是死锁? 如何解决死锁?

什么是死锁

死锁,简单来说就是两个或者多个的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。如果没有外部干预线程会一直阻塞下去.
在这里插入图片描述

导致死锁的原因

  1. 互斥条件,共享资源 X 和 Y 只能被一个线程占用;

  2. 请求和保持条件,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X;

  3. 不可抢占条件,其他线程不能强行抢占线程 T1 占有的资源;

  4. 循环等待条件,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。

导致死锁之后,只能通过人工干预来解决,比如重启服务,或者杀掉某个线程 !!!

如何解决

只要打破以上四个条件其中一个就可以解决死锁, 除了互斥条件无法打破

  • 对于“请求和保持”这个条件,我们可以一次性申请所有的资源,这样就不存在等待了。

  • 对于“不可抢占”这个条件,占用部分资源的线程进一步申请其他资源时,如果申不到,可以主动释放它占有的资源,这样不可抢占这个条件就破坏掉了。

  • 对于“循环等待”这个条件,可以靠按序申请资源来预防, 是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的, 这样线性化后自然就不存在循环了。

http://www.lryc.cn/news/305899.html

相关文章:

  • 网络原理 HTTP _ HTTPS
  • 软件实际应用实例,茶楼收银软件管理系统操作流程,茶室计时计费会员管理系统软件试用版教程
  • 网络安全“三保一评”深度解析
  • IDA使用-2023CICSN华中赛区pwn题逆向为例
  • 安装虚拟机出现的一些问题
  • Git+py+ipynb Usage
  • eBPF实践篇之环境搭建
  • 机器学习科普及学习路线
  • 如何在本地电脑部署HadSky论坛并发布至公网可远程访问【内网穿透】
  • Spring Boot 笔记 025 主界面
  • (done) Positive Semidefinite Matrices 什么是半正定矩阵?如何证明一个矩阵是半正定矩阵? 可以使用特征值
  • 七、矩阵的初等变换
  • CSS background-size
  • 【机器学习】特征工程之特征选择
  • Java中PDF文件传输有哪些方法?
  • 前后端分离Vue+ElementUI+nodejs蛋糕甜品商城购物网站95m4l
  • Pytorch 复习总结 3
  • 2024年危险化学品经营单位主要负责人证考试题库及危险化学品经营单位主要负责人试题解析
  • go使用trpc案例
  • nodejs+vue+ElementUi废品废弃资源回收系统
  • 【Java程序设计】【C00277】基于Springboot的招生管理系统(有论文)
  • 汇编语言与接口技术实践——秒表
  • 【数据结构与算法】(19)高级数据结构与算法设计之 图 拓扑排序 最短路径 最小生成树 不相交集合(并查集合)代码示例
  • OSCP靶场--Nickel
  • 新建工程——库函数版
  • java 数据结构栈和队列
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • LeetCode 2476.二叉搜索树最近节点查询:中序遍历 + 二分查找
  • 选座位 - 华为OD统一考试(C卷)
  • 【微服务】mybatis typehandler使用详解