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

7、什么是死锁,如何避免死锁?【高频】

(1)什么是死锁

死锁 是指在两个或多个进程的执行时,每个进程都持有资源,并都在等待其他进程 释放 它所需的资源,如果此时所有的进程一直占有资源而不释放,就导致了死锁。

死锁只有同时满足 四个条件时才会发生:

  1. 互斥:也就是 这块资源 只能被一个进程获取

  2. 请求并保持:进程因为请求资源而阻塞了,同时它也不会释放自己的资源

  3. 不可剥夺:资源只能由持有者 自愿释放,不能强行剥夺

  4. 循环等待:即p1占有p2的资源,p2占有p3的资源,p3占有p1的资源,这样形成了一个等待环路

(2)如何避免死锁

通过 破坏死锁的四个必要条件之一 来预防死锁。

  • 其中最容易破坏的就是 循环等待 这个条件。我们可以让 多个线程约定好一定的顺序,所有线程都按照同一个顺序 加锁释放锁
  • 破坏 请求并保持 这个条件,我们要求 进程因为请求资源而阻塞了,这时它必须会释放自己的资源,以后需要时再重新申请

相关文章:

  • javaweb自用笔记:Vue
  • 计算机软考(二)-思维导图
  • linux如何在某个文件夹下查看所有文件(层级只到当前文件夹的两层)并找到‘XXXX’ 这个单词
  • 性能测试监控工具jmeter+grafana
  • 软考中级-数据库-3.4 数据结构-图
  • sql-labs靶场笔记
  • list
  • 一些相关知识
  • 队列的顺序结构——循环队列——入队
  • 【零基础到精通Java合集】第十一集:List集合框架与泛型
  • 【练习】【链表】力扣热题100 2. 两数相加
  • 鸿蒙开发中,数据持久化之Transaction(事务)的概念及应用
  • C语言基础要素(010):复合赋值
  • Android 14 - HDMI_CEC架构分析
  • Go语言学习笔记(六)——标准库
  • 量子算法:英译名、概念、历史、现状与展望?
  • SparkStreaming之04:调优
  • WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中
  • 深入 PipeWire
  • Lua如何实现面向对象的三大特性?
  • 做国际黄金看什么网站/百度app安卓版下载
  • 网页设计与网站建设基础/网络工程师培训班要多少钱
  • 苹果cms搭建教程/福州seo推广服务
  • 广州网站制作是什么/推广之家app
  • 凡科网站免费注册/广告传媒公司经营范围
  • 电脑培训班的课程/南京seo优化公司