1、什么是死锁

所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。

举个例子

2线程就是两个孩子,2锁其中一个是电池,另一个是电动汽车,a孩子拿着电池,b孩子拿着电动汽车,a想要b的车,b想要a的电池,谁也不肯退,所以谁也玩不上,都僵在那里就是死锁
解决方法,1、一次申请所有资源就是把玩具和电池放一起,只让一个孩子拿到2、主动释放就是有个孩子比较懂事,先让出自己的玩具部分3、玩具给幼儿园老师看着,只有拿到车的才发电池。

两个线程需要两个资源才能进行下去,一线程有一资源,二线程有二资源,一二线程要想进行下去都需要同时拥有两个资源。而双方都不会把手中已经得到的资源放出去,所以双方都不会凑齐两个资源,线程也就不会完成,只会一直等待对方放开资源,形成死锁。

或者说我要去药店买口罩,而进药店需要我带着口罩,这是就僵在这里。除非有外力因素否则不会打破这个情况。

2、死锁产生的4个必要条件?

产生死锁的必要条件:

互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。

3、解决死锁的基本方法

预防死锁:

资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)
只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)
可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)
资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

4、解除死锁:

当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:

剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;
撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

什么是死锁?怎么解决死锁问题?相关推荐

  1. linux下死锁怎么解决方法,死锁,解决死锁的4种基本方法

    死锁,解决死锁的4种基本方法 死锁 这个概念是操作系统里面很重要的内容,前阵子面试字节被问到了,太久没复习,面经变凉经. 死锁(Deadlock),又被翻译为死结.是操作系统或软件运行的一种状态,在多 ...

  2. java死锁_Java死锁原理,手写死锁,解决死锁

    死锁:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等在对方释放资源. 都停止的情形.某一个同步块同时拥有两个以上对象的锁时,就会产生死锁问题. 手写 ...

  3. java避免活锁.死锁的解决,死锁 活锁 饥饿 出现原因及解决方案

    文章目录 死锁 概念 死锁示例 为什么会出现死锁呢? 如何解决死锁呢? 解决死锁代码实现 活锁 概念 活锁示例: 如何解决活锁呢? 饥饿 概念 如何解决饥饿呢? 死锁 概念 死锁:一组互相竞争资源的线 ...

  4. 线程死锁的成因?如何查找并定位死锁,解决死锁?这里教你几招~

    目录 什么是死锁? 死锁代码案例: 出现死锁的原因 教你如何定位死锁位置~ 死锁解决方法 什么是死锁? 死锁就是指线程t1要使用的资源被线程t2占用,线程t2想使用的资源被线程 t1占用,这就像两股绳 ...

  5. 死锁的充分必要条件、死锁预防、死锁避免、死锁检测和解除

    2.19.2 死锁的条件 必要条件 互斥:一次只有一个进程可以使用一个资源 占有且等待:当进程等待其他资源时继续占有已有的资源 不可抢占:进程不能强行占有其他进程占有的进程 充分条件 循环等待:存在一 ...

  6. 线上出现死锁怎么解决?

    点击关注公众号,Java干货及时送达 来源 | https://www.sevenyuan.cn/ 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制. 因为数据也是一种供许多用户 ...

  7. 面试官:谈谈什么是死锁?如何解决死锁?

    死锁就是有一天你回家,拿着一把钥匙使劲往锁眼里面捅,结果钥匙断里面了,所以你就叫开锁师傅要开锁,结果锁给开死了,这就是死锁了.以上仅仅是玩笑话,以下步入正题. 什么是死锁? 要了解什么是死锁,要首先明 ...

  8. 巧用MySQL InnoDB引擎锁机制解决死锁问题

    案例如下: 在使用Show innodb status检查引擎状态时,发现了死锁问题: *** (1) TRANSACTION: TRANSACTION 0 677833455, ACTIVE 0 s ...

  9. SQL Server 2005中解决死锁问题

    SQL Server 2005中解决死锁问题 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面 ...

  10. 使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题

    使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题 参考文章: (1)使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题 (2)https://www.cnblogs. ...

最新文章

  1. 一些很实用且必用的小脚本代码:
  2. Homebrew安装不要改hosts了,直接用这个国内源才爽!
  3. [Ubuntu] SVN常用的批量操作
  4. NetBeans 时事通讯(刊号 # 124 - Nov 11, 2010)
  5. SLAM Cartographer(3)定位和子图构建节点
  6. 矢量归一化_7. 从矢量观测到姿态观测
  7. Android之编写测试用例
  8. VSCode编译Python环境搭建及发布Python应用
  9. win7下安装openSSH
  10. 博弈论-第一章 概述
  11. linux—vi编辑器常用命令
  12. sad代价计算_基于改进代价计算和自适应引导滤波的立体匹配
  13. java实现小写转大写_人民币小写转大写(Java实现)
  14. 网页设计的可用性问题
  15. 关于搭建k8s集群遇到的问题与解决方法
  16. Java8 Phaser 源码解析
  17. 国内工业机器人发展水平综述
  18. 300最不常用的springboot计算机毕业设计题目汇总,总有你需要用到的
  19. A005-AS项目结构解析
  20. 白盒测试junit实现三角形问题

热门文章

  1. 520运维侠客行·北京站传统IT运维转型之道圆满落幕
  2. android微信自动化脚本,聊聊微信自动化的几种方案
  3. java除法不显示小数/andriod studio判断edittext是否为空值
  4. 越过中秋之总结915
  5. 多线程问题-买票问题
  6. 华为交换机配置时区_把华为交换机设置成(NTP)时钟源服务器
  7. 简单几步把LOGO变字体
  8. MacOS 合并一个磁盘下的两个分区
  9. android studio更新3.2遇到的坑,unable to resolve dependency for app@...... 真的是各种都试错了,终于解决啦,原博主真的牛X
  10. Ubuntu安装webpack