死锁的四个产生必要条件

2024-06-03 10:38

本文主要是介绍死锁的四个产生必要条件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

死锁的四个产生必要条件

死锁:死锁是指两个或两个以上的进程进在执行过程中,由于资源竞争或由于相互通信而造成的一种阻塞式现象,如果没有外力影响。那么它们将永远的持续下去, 此事称系统产生死锁现象,这种永远互相在等待的进程成为死锁。

死锁的四个产生必要条件:

1、互斥条件:进程对所分配到的资源具有排他性使用,一段时间内某资源只由一个进程所占有。若此时还有其他请求资源,则请求者只能等待,直到占有资源的进程使用完毕释放。

2、请求和保持条件:进程已经保持至少一个资源,但是又提出新的资源请求,而该资源已经被其他进程所占有,此时请求进程阻塞,但又对自己已经获得的其他资源保持不变。

3、不可剥夺条件:进程获得的资源,在未使用完之前,不能被剥夺,只能在使用完时有自己释放。

4、环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。

死锁的产生原因:

1、竞争资源引起进程死锁:当系统中供多个进程共享的资源例打印机、公用队列等,其数目不足以满足进程的需要时,会引起诸进程对资源的竞争而产生死锁。

2、可剥夺与不可剥夺资源

3、竞争不可剥夺资源:当系统所配置的不可剥夺资源,由于数量不能满足诸进程运行的需要时,会使进程在运行过程中,因争夺这些资源而陷入僵局。

4、竞争临时资源:打印机等为可顺序重复使用性资源,称为永久资源。还有一种临时资源,就是由一个进程产生,被另外一个进程使用,短时间内后便没有用的资源,也称为消耗性资源。

解决思索问题的算法:

有序资源分配法

按照某种规则系统中的所有资源统一编号(例如打印机为1,磁带机为2 、磁盘为3等)申请时必须以上升的次序。

系统要求申请进程:1、对它所必须使用的而且属于同一类的所有资源,必须一次申请完;

2、在申请不同类资源时,必须按照各类设备的编号一次申请。

采用有序资源分配法:R1的编号为1,R2的编号为2;

PA:申请次序应该是:R1,R2

PB:申请次序应该是:R2,R1

银行家算法:

避免死锁算法最有代表的就是Dijkstra.E.W于1968年提出的银行家算法,是避免死锁的一种重要方法,防止死锁的机构只要确保上述资格条件之一不出现,则系统就不会出现死锁问题。在操作系统中研究资源分配策略时也有类似的问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程的使用。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。

把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态、完成态。当进程处于等待状态时,表示系统不能完全满足该进程当时的资源申请。银行家算法进行资源分配可以避免死锁问题。

这篇关于死锁的四个产生必要条件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026750

相关文章

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

【Linux修行路】线程安全和死锁

目录 ⛳️推荐 一、线程安全 1.1 常见的线程不安全情况 1.2 常见的线程安全情况 1.3 常见的不可重入情况 1.4 常见可重入的情况 1.5 可重入与线程安全的联系 1.6 可重入与线程安全的区别 二、死锁 2.1 死锁的四个必要条件 2.2 如何避免产生死锁? ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大

如何限制与管控员工上网行为?四个方法让员工效率倍增!【企业员工上网行为管理】

在信息化时代,员工的上网行为直接影响着工作效率和企业的安全性。不当的网络使用,如浏览与工作无关的网站、下载不安全的文件,可能导致工作效率低下,甚至引发安全风险。因此,许多企业正在积极寻找有效的措施来管控员工的上网行为,以确保工作效率的提升。 以下是四个常见且有效的员工上网行为管理方法,帮助企业实现更高效的网络管理。 方法一:配置网络防火墙进行访问限制 最基础的员工上网行为管理方法是通过配置防

模拟线程死锁——Thread学习笔记

记录一下之前写过的一段模拟死锁的代码: /*** 模拟死锁** @author lixiang* @date 2018年10月12日 - 9:51* @history 2018年10月12日 - 9:51 lixiang create.*/public class HoldLockDemo {private static Object[] lock = new Object[10];priv

当网工,华为认证哪种适合我?四个维度来解惑

随着网络技术的不断进步,对网工的专业技能要求也越来越高。 在这种背景下,获得权威认证成为了提升个人技能、证明专业能力的重要途径。 华为,作为全球领先的ICT解决方案提供商,其认证项目在业界享有极高的声誉。 华为认证不仅涵盖了网络技术的各个方面,还根据不同的技能水平和职业发展阶段,提供了不同级别的认证,包括HCIA、HCIP、HCIE。 这些认证不仅有助于网络工程师提升自己的技术水平,也是企业在招聘

【编程底层思考】如何检测和避免线程死锁

一、什么是线程死锁? 线程死锁发生在多个线程因为争夺资源而相互阻塞,导致程序无法正常结束的情况。例如,线程A持有资源2并等待资源1,线程B持有资源1并等待资源2,这样就形成了死锁。 二、如何检测死锁? 使用jmap、jstack等命令行工具查看JVM的线程栈和堆内存情况,jstack可以显示死锁信息。使用VisualVM、JConsole等图形化工具进行排查。例如,JConsole可以连接到

C++11 Thread线程池、死锁、并发

一、线程与进程         进程:运行中的程序         线程:进程中的小进程 二、线程库的使用         包含头文件#include<thread> 2.1 thread函数         具体代码: void show(string str) {cout << "This is my word : " << str << endl;}int main() {t

Mysql的四个隔离级别 与mvcc(2)

特殊颜色字体为自己总结,关于mvcc直接看最后面的。 一、Mysql的四个隔离级别 预备工作: 先创建一个test数据库及account表, create database test;use test;create table account(id int not null,balance float not null,PRIMARY KEY ( id)) 向accoun

C++ 的死锁问题的发生和避免

C/C++程序中产生死锁的原因很多,本文大致归纳了下面几类,分别做分析。 1.单线程/进程多次加锁导致死锁 单线程导致死锁的情况一般是由于调用了引起阻塞的函数,比如(copy_from_user()、copy_to_ser()、和kmalloc()),阻塞后进行系统调度,调度的过程中有可能又调用了之前获取锁的函数,这样必然导致死锁。 还有一种就是自旋锁函数在没有释放锁马上又进行申请同一个自旋

OPenCV结构分析与形状描述符(4)计算一个旋转矩形的四个顶点的函数boxPoints()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 找到一个旋转矩形的四个顶点。对于绘制旋转矩形很有用。 该函数找到一个旋转矩形的四个顶点。这个函数对于绘制矩形很有帮助。在C++中,可以不用这个函数,而是直接使用RotatedRect::points方法。更多相关信息,请访问创建边界旋转框和轮廓