死锁,解决死锁的4种基本方法

死锁

这个概念是操作系统里面很重要的内容,前阵子面试字节被问到了,太久没复习,面经变凉经。

死锁(Deadlock),又被翻译为死结。是操作系统或软件运行的一种状态,在多任务系统下,当一个或多个进程等待系统资源、而资源又被进程本事或其他进程占用,就形成了死锁。现如今的操作系统都是多任务执行,只有可以协调好不同的进程,才可以让系统运行流畅不卡顿。

插入图片

起因

如果系统只有一个进程在运行,当然不会产生死锁,就像独生子女在家似的。不过这是理想状态,在现实中可遇不可求。

死锁的四个条件:

禁止抢占 (No preemption) : 系统资源不能被强制从一个进程中退出

持有和等待 (Hold and wait) : 一个进程可以在等待时有系统资源

互斥 (Mutual exclusion) : 资源只能同时分配给一进程,无法多个进程共享,比如驱动器、打印机等

循环等待 (Circular waiting) :一系列进程互相持有其他进程所需要的资源

死锁只有在四个条件(必要条件)同时发生,防止死锁发生只需要破坏其中一项。一般的,解决死锁的方法分为死锁的预防、避免、检测与恢复三种。

死锁的预防

死锁的预防是保证系统不进入死锁状态的一种策略。方法就是要求进程在创建时服从某种协议,从而打破产生死锁的四个必要条件。

死锁的避免

该策略不限制进程有关申请资源的命令,而是对进程所发出的每一个申请资源命令加以动态检查,并根据检查结果决定是否进行资源分配。

该策略用到一个著名的避免死锁的算法--银行家算法,由Dijstra提出并加以解决的。具体分析这里不展开了,简要概括下该算法:银行家算法允许死锁必要条件重的互斥条件、占有且申请条件、不可抢占条件的存在,这样它与预防死锁的方法相比限制较少,资源利用程度高了。

算法的缺点如下:

检测与恢复

死锁检测:

if 每种资源类型只有一个实例:{

构建资源分配图,采用DFS确定是否由环路

} else if {

每种资源类型还有多个实例的情况:

构建向量矩阵

}

最简单的消除死锁的办法是重启~没有重启解决不了的事情,如果有,就重买台机器。

逃)

死锁恢复:

附加:

如果一个进程被多次回滚,迟迟不能占用必须的系统资源,可能会导致资源匮乏 (resource starvation)。

Resource starvation is a problem encounterd in concurrent computing where a process is perpetually denied necessary resources to process its work. Starvation may be caused by errors in a scheduling or mutual exclusion algorithm. Also, it can be caused by resource leaks.

Then what is resorce leaks? Resource leaks are particular type of resource consumption by a computer program where the program does not release resources it has acquired. Also, resource leaks are particularly a problem for resources avaliable in very low quantities. Leaking a unique resource, such as a lock, is pretty serious, as this causes immediate resource starvation and cause deadlock.

活锁

活锁(livelock),与死锁相似,死锁是进程都在等待对方先释放资源,而活锁则是进程彼此释放资源后同时占用对方释放的资源。当此情况持续发生时,尽管资源的状态不断改变,但每个形成都无法获取所需资源,使得事情没有任何进展。

http://www.dengb.com/Linuxjc/1415160.htmlwww.dengb.comtruehttp://www.dengb.com/Linuxjc/1415160.htmlTechArticle死锁,解决死锁的4种基本方法 死锁 这个概念是操作系统里面很重要的内容,前阵子面试字节被问到了,太久没复习,面经变凉经。 死锁(...

linux下死锁怎么解决方法,死锁,解决死锁的4种基本方法相关推荐

  1. Linux下browser-sync无法启动Chrome的解决方法

    Linux下browser-sync无法启动Chrome的解决方法 参考文章: (1)Linux下browser-sync无法启动Chrome的解决方法 (2)https://www.cnblogs. ...

  2. atom编辑器Linux中文版,linux atom 怎么支持中文 Linux下Atom编辑器不支持中文解决方法...

    Atom 是 Github 专门为程序员推出的一个跨平台文本编辑器.具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,JavaScript等网页编程语言.它支持宏,自动完成分屏功 ...

  3. linux下mysql的root密码忘记解决方

    linux下mysql的root密码忘记解决方 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没 ...

  4. linux误删 bin目录,记linux下rm误删bin文件的解决方式

    平常有个坏习惯,删文件为了快点,喜欢用rm xx*,删除一些关键词文件.今天为了删/bin下几个含有mix关键词的文件,使用命令rm mix*.手贱,mix和*之间多了个空格...灾难发生了!bin下 ...

  5. 短小视频网站sexcms源码 安装搭建环境加采集教程 有手机和PC演示站 linux下安装一片空白的解决linux下安装一片空白的解决

    特别注意:在linux下安装一片空白的解决方法:把index.php的第66行改为require_once sexPATH.'lib/Cs_Sex.php';就行.linux下要注意大小写区分. 电脑 ...

  6. Linux下MySql插入汉字报错解决(/etc/my.cnf不存在)

    2019独角兽企业重金招聘Python工程师标准>>> Linux下MySql插入汉字报错解决(/etc/my.cnf不存在) 看了很多帖子,大多数是说修改my.cnf,如 http ...

  7. mysql linux root密码忘记了怎么办,linux下忘记mysql的root密码解决办法 | 严佳冬

    下面就记录一下在linux下忘记mysql的root密码解决办法: 1.vim /etc/my.cnf    #编辑文件,找到[mysqld],在下面添加一行skip-grant-tables [my ...

  8. linux下cp复制目录时排除某些目录的方法分享,Linux 下复制(cp)目录时排除一个或者多个目录的方法...

    cp 貌似没有排除目录的功能,可以使用 rsync 命令来实现了,如: [案例] /home/52php目录里面有data目录,data目录里面有 a.b.c.d.e 五个目录,现在要把data目录里 ...

  9. linux查看远程服务器端口,linux下查看本机和远程服务器的端口是否连通的方法...

    linux下查看本机和远程服务器的端口是否连通的方法 如下所示: 1.ssh -v -p [端口号] [用户名]@[IP地址] 2.curl [IP地址]:[端口号] 以上这篇linux下查看本机和远 ...

  10. linux如何进入su超级用户,Linux下普通用户用sudo su给自己加root权限的方法

    首先: sudo这个命令就是给后面的命令加上root权限(sudo=superuser do),su这个命令是switch user,切换用户,你sudo su这个命令的意思是用root的权限来切换到 ...

最新文章

  1. MySQL主从数据库同步延迟问题解决
  2. pxe网络安装操作系统 原理与详细过程
  3. log4j的配置参数
  4. Eclipse debug neutron-server
  5. python怎么打开程序管理器_Python 进程管理工具 Supervisor 使用教程
  6. SGI opengl source code download
  7. micropython 驱动 移植_MicroPython v1.12 版本更新
  8. 30岁前挣到10万年薪 五位年轻人的高薪秘诀
  9. java win10 x64下载地址_javawin10 64位
  10. autoconfig
  11. Java基础之线程原子量
  12. 水晶报表繁体转简体心得:之一 RPT文件篇
  13. 可汗学院公开课:投资与估值
  14. 基于JavaWeb的文献管理系统设计与实现
  15. eCharts——柱状图中的柱体颜色渐变
  16. JDK8 | 字符串收集器 Collectors.joining()
  17. 如何做好功能测试,提升测试质量和效率?(测试人员必知)
  18. echart 广州3d_vue echarts 3D地图+省+弹窗
  19. python中import re_Python3中正则模块re.compile、re.match及re.search函数用法详解
  20. 阿里云oss(图片存储)--fastdfs (视频存储)

热门文章

  1. 中国土壤学会土壤生物与土壤健康研讨会(4月16-18日,杭州)
  2. 计算机软件基础教程刘彦明,软件技术基础教程
  3. linux命令菜鸟2.0--干货
  4. Unity菜单树 TreeView
  5. php 开发回合游戏,Unity回合制游戏战斗模块的制作
  6. 2023年已过一半,如何做好半年度复盘?揭秘职场高手的六大秘籍!
  7. 电子哨兵硬件的防静电设计
  8. 红米K40s如何启用录屏功能
  9. mysql 电商实战_MySQL与电子商务实战
  10. Linux (一) 创建虚拟机以及基本配置