死锁的产生、预防和避免

死锁是由于并发进程只能按互斥方式访问临界资源等多种因素引起的,并且是一种与执行时间和速度密切相关的错误现象。
死锁的一般定义:若在一个进程集合中,每一个进程都在等待一个永远不会发生的事件而形成一个永久的阻塞状态,这种阻塞状态就是死锁。

死锁的产生条件:
1.互斥(mutual exclusion):系统存在着临界资源;
2.占有并等待(hold and wait):已经得到某些资源的进程还可以申请其他新资源;
3.不可剥夺(no preemption):已经分配的资源在其宿主没有释放之前不允许被剥夺;
4.循环等待(circular waiting):系统中存在多个(大于2个)进程形成的封闭的进程链,链中的每个进程都在等待它的下一个进程所占有的资源;

死锁的预防:
因为独占资源必须以互斥方式进行访问,所以要预防死锁只能从破坏后三个条件下手了。
1.破坏占有并等待条件:
要破坏这个条件,就要求每个进程必须一次性的请求它们所需要的所有资源,若无法全部获取就等待,直到满足为止,也可以采用事务机制,确保可以回滚,即把获取、释放资源做成原子性的。这个方法实现起来可能会比较困难,因为某些情况下,进程并不能事先直到自己需要哪些资源,也有时候并不需要分配到所有资源就可以运行。
2.破坏不可剥夺条件:
一个已占有资源的进程若要再申请新的资源,它必须先释放已占有的资源。若随后再需要这些资源,需要重新申请。
3.破坏循环等待条件:
将系统中所有的资源设置标志位、排序,规定所有的进程申请资源必须以一定的顺序(升序或降序)做操作。

死锁的避免:
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。
死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。
避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。方法如下:
1.如果一个进程的当前请求的资源会导致死锁,系统拒绝启动该进程;
2.如果一个资源的分配会导致下一步的死锁,系统就拒绝本次的分配;
显然要避免死锁,必须事先知道系统拥有的资源数量及其属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python numpy.random模块中提供啦大量的随机数相关的函数

1. numpy中产生随机数的方法 1)rand()   产生[0,1]的浮点随机数,括号里面的参数可以指定产生数组的形状 2)randn()  产生标准正太分布随机数,参数含义与random相同 3)randint()  产生指定范围的随机数,最后一个参数是元祖,他确定数组的…

eclipse复制代码连接数据库404_再见,Eclipse ...

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏 中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析作业…

单页vue路由router

Vue.js vue-router 可以很简单的实现单页应用。 <router-link> 是一个组件&#xff0c;该组件用于设置一个导航链接&#xff0c;切换不同 HTML 内容。 to 属性为目标地址&#xff0c; 即要显示的内容。 以下实例中我们将 vue-router 加进来&#xff0c;然后配置组件和路…

python 多线程为什么鸡肋?

什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环&#xff0c;CPython版本)来控制&#xff0c;Python 在设计之初就考虑到要在解释器的主循环中&#xff0c;同时只有一个线程在执行&#xff0c;即在任意时刻&#xff0c;只有一个线程在解释器中运行。对…

usb端点轮询_使用Spring Integration轮询http端点

usb端点轮询如果您想用Spring Integration编写一个流程来轮询HTTP端点并从http端点收集一些内容以进行进一步处理&#xff0c;那有点不直观。 Spring Integration提供了几种与HTTP端点集成的方式- Http出站适配器–将消息发送到http端点 Http出站网关–将消息发送到http端点…

tensorflow下载

以下下载的为tensorflow版本为1.2.1 GPU python3.6 python3.5 https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.2.1-cp35-cp35m-win_amd64.whlhttps://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.2.1-cp36-cp36m-win_amd64.wh…

make时候说找不到makefile_找不到对象,应不应该接受相亲?听听三个过来人怎么说...

找我分享你的故事&#xff0c;点击右上角关注&#xff0c;你就是我的人了&#xff01;相信每一个人都有这样一个愿望&#xff1a;希望在自己感情的世界里面能够遇到一个执子之手&#xff0c;与子偕老的人共度余生。可是不是每个人都能够那么幸运的&#xff0c;那么轻易的就遇上…

Synchronized总结

一、synchronized加锁原理 synchronized可以保证方法或者代码块在运行时&#xff0c;同一时刻只有一个线程可以进入到临界区&#xff0c;同时它还可以保证共享变量的内存可见性。 Java中每一个对象都可以作为锁&#xff0c;这是synchronized实现同步的基础&#xff1a; &#x…

dpkg命令

dpkg命令如果ubuntu要安装新软件&#xff0c;已有deb安装包&#xff08;例如&#xff1a;iptux.deb&#xff09;&#xff0c;但是无法登录到桌面环境。那该怎么安装&#xff1f;答案是&#xff1a;使用dpkg命令。dpkg命令常用格式如下&#xff1a;sudo dpkg -I iptux.deb#查看i…

linux进程间的通信(C): 共享内存

一、共享内存介绍共享内存是三个IPC(Inter-Process Communication)机制中的一个。它允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式。大多数的共享内存的实现&#xff0c;都把由不同进程之间共享的内存安排为同一段…

使用js在桌面上写一个倒计时器_论一个倒计时器的性能优化之路

原文发表于 2018.05.25&#xff0c;搬运自个人博客。引子回顾这半年&#xff0c;扛需求能力越来越强&#xff0c;业务代码也是越写越多。但稍一认真看看这些当时为了满足快速上线所码的东西&#xff0c;问题其实还是不少。这次就从一个简单的计时器说起。现状问题很明显倒计时器…

Vue 导入文件import、路径@和.的区别

***import&#xff1a; html文件中&#xff0c;通过script标签引入js文件。而vue中&#xff0c;通过import xxx from xxx路径的方式导入文件&#xff0c;不光可以导入js文件。 from前的&#xff1a;“xxx”指的是为导入的文件起一个名称&#xff0c;不是指导入的文件的名称&…

python split()

python函数&#xff1a;split() Python中有split()和os.path.split()两个函数&#xff0c;具体作用如下&#xff1a; split()&#xff1a;拆分字符串。通过指定分隔符对字符串进行切片&#xff0c;并返回分割后的字符串列表&#xff08;list&#xff09; os.pa…

windows聚焦图片为什么不更新了_为什么年轻明星都不愿意接周星驰的戏? 林更新道出了事情的真相|周星驰|林更新|喜剧之王|演员...

要说华语电影史上最有成就的喜剧之王&#xff0c;那么大家脑中一定会闪过周星驰的名字&#xff0c;相信在不少60后、70后心目中&#xff0c;都有周星驰的一席之地。《大话西游》、《逃学威龙》、《九品芝麻官》等一系列作品都是非常经典的作品&#xff0c;就算是拿到当下来看都…

多线程多进程解析:Python、os、sys、Queue、multiprocessing、threading

当涉及到操作系统的时候&#xff0c;免不了要使用os模块&#xff0c;有时还要用到sys模块。 设计到并行程序&#xff0c;一般开单独的进程&#xff0c;而不是线程&#xff0c;原因是python解释器的全局解释器锁GIL&#xff08;global interpreter lock&#xff09;&#xff0c;…

练习1

方法一&#xff1a; 统计在一个队列中的数字&#xff0c;有多少个正数&#xff0c;多少个负数&#xff0c;如[1, 3, 5, 7, 0, -1, -9, -4, -5, 8] lists [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]positive 0 negative 0for number in lists:if number > 0:positive 1elif nu…

python sort()、sorted()

python sort、sorted排序 这篇文章主要介绍了python sort、sorted高级排序技巧,本文讲解了基础排序、升序和降序、排序的稳定性和复杂排序、cmp函数排序法等内容. python list内置sort()方法用来排序&#xff0c;也可以用python内置的全局sorted()方法来对可迭代的序列排…

电脑内存占用莫名很高_CPU占用高,电脑莫名卡顿?万能的重启拯救不了就用这3招,妥了!...

大家还记得windows 10 1903推送时发生的大翻车事件吗&#xff1f;那次的更新主要是修复早期版本的Visual Basic 6、VBA和VBScript无反应、远端桌面出现当机黑屏幕等问题&#xff0c;但win10的更新总是“捡了芝麻&#xff0c;丢了西瓜”&#xff0c;解决早期问题而又出现新的问题…

5. 多线程程序如何让 IO 和“计算”相互重叠,降低 latency?

基本思路是&#xff0c;把 IO 操作&#xff08;通常是写操作&#xff09;通过 BlockingQueue 交给别的线程去做&#xff0c;自己不必等待。 例1: logging 在多线程服务器程序中&#xff0c;日志 (logging) 至关重要&#xff0c;本例仅考虑写 log file 的情况&#xff0c;不考…

tomcat web应用_具有可执行Tomcat的独立Web应用程序

tomcat web应用在部署应用程序时&#xff0c;简单性是最大的优势。 您将了解到&#xff0c;尤其是在项目发展且需要在环境中进行某些更改时。 将您的整个应用程序打包到一个独立且自足的JAR中似乎是个好主意&#xff0c;特别是与在目标环境中安装和升级Tomcat相比。 过去&#…