死锁(5.1) 淡淡的烟草味﹌ 2024-03-30 17:40 13阅读 0赞 ### 死锁 ### ### 1 死锁的基本概念 ### ##### 1.1 死锁的定义 ##### 死锁是发生在一组相互合作或竞争的线程或进程中的一个问题。因此可以定义为:一组竞争系统资源或相互通信的进程相互的“永久”阻塞。若无外力作用,这组进程将永远不能继续执行。 ![在这里插入图片描述][abef88708a6045d98000d0d7998e93fd.png] ##### 1.2死锁产生的原因进程 ##### (1)资源数小于要求该种资源的进程数 //A、B分别代表某种资源 进程P ...... get(A); ...... get(B); ...... release(A); ...... release(B); ...... 进程Q ...... get(B); ...... get(A); ...... release(B); ...... release(A); ...... 当进程P占用资源A,进程Q占用资源B,接下来导致进程P无法获得B资源,进程Q无法获得A资源。即双方都占用对方所需要的资源,这样就发生了死锁。 (2)进程的推进顺序非法 ![在这里插入图片描述][0c51ac1a870b4854863be712136c2a08.png] ![在这里插入图片描述][46d514dac0a64367a0855ecc855d0dba.png] ### 2 死锁的预防与避免 ### ##### 2.1 产生死锁的四个必要条件 ##### * 互斥条件 * 请求保持条件 * 不剥夺条件 * 环路条件 ##### 2.2 死锁的预防 ##### 采用资源的有序分配:令所有资源排队,并赋予不同的序号。当进程请求资源时,必须严格按递增的次序提出,从而消除了环路。 缺点: * 定好序号后,增加新设备类型受到限制。 * 尽管定序号时考虑大多数作业使用资源的顺序。但会发生使用顺序与规定顺序不一致的情况,造成资源浪费。 * 限制用户简单、自主地编程。死锁的预防措施低效! 可以去掉“请求保持条件”,“不剥夺条件”,“环路条件”,但不能去掉“互斥条件”。 ##### 2.3 死锁的避免 ##### 避免死锁是通过明智的选择,确保系统永远不会到达死锁点。即动态地决定是否分配资源给进程! * 安全状态是指系统至少存在一个安全序列<P1, P2, …, Pn>,按照这个序列为进程分配资源,直到满足最大需求,每个进程都可顺序完成。 * 若系统不存在这样一个安全序列,则系统处于不安全状态。 ![在这里插入图片描述][b827eef9c260481aa95fe4ab91faaf36.png] ##### 2.4 死锁的检测与解除 ##### **资源分配图的简化** * 在图中找出一个既不阻塞又非独立的进程结点pi,消去pi所有的请求边和分配边,使之成为孤立结点。 * 在进行一系列简化后,能消去图中所有的边,使所有进程都成为孤立结点,则称该图是可以完全简化的,否则若不能通过任何过程使该图完全简化,则称该图是不可完全简化的。 ![在这里插入图片描述][e1ba36bdc2bf482fa46fdcc826c7a2a5.png] **死锁的解除** 当发现死锁时,应立即把它们从死锁中解脱出来,常采用的两种方法是: * 剥夺资源:从其它进程剥夺足够数量的资源给死锁进程。 * 撤消进程:撤消的原则是 为解除死锁状态所需撤消的进程数目最小。 撤消进程所付出的代价最小。 [abef88708a6045d98000d0d7998e93fd.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/30/45ad2d80b7444ae7815070464344ec4e.png [0c51ac1a870b4854863be712136c2a08.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/30/8b854d1a429a47c6bff9bcee5a6f5130.png [46d514dac0a64367a0855ecc855d0dba.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/30/ad04ff476bb44bd5947d7c25789ddf7c.png [b827eef9c260481aa95fe4ab91faaf36.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/30/cfc1009b20f944dda3ab9934ce6b322b.png [e1ba36bdc2bf482fa46fdcc826c7a2a5.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/30/fd2ad452bced4843b65fc10232d18fc7.png
相关 死锁 线程 T1 占有A锁的钥匙, 同时需要拿B锁的钥匙. 线程 T2 占有B锁的钥匙, 同时需要拿A锁的钥匙. 如果两个线程都不释放自己的钥匙, 那么就会出现死锁. 如果T1线 淩亂°似流年/ 2022年12月27日 08:56/ 0 赞/ 22 阅读
相关 死锁 什么是死锁 死锁,就是指多个线程循环等待它方占有的资源而无限期地僵持下去的局面。 如果没有外力的作用,那么死锁涉及到的各个线程都将永远处于阻塞状态。 就如同两个人过 Love The Way You Lie/ 2022年12月09日 03:11/ 0 赞/ 26 阅读
相关 死锁 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ub ╰+攻爆jí腚メ/ 2022年10月26日 04:00/ 0 赞/ 27 阅读
相关 死锁 > Java程序无法从死锁中恢复过来,所以设计程序时一定要排除死锁的可能。死锁中的经典问题就是哲学家进餐问题。 死锁的常见类型 锁顺序死锁 下图所示就是最典型的锁 雨点打透心脏的1/2处/ 2022年07月13日 14:09/ 0 赞/ 252 阅读
相关 死锁 一.死锁发生的条件 死锁的发生必须具备下列4个必要条件: –互斥:任一时刻只允许一个进程使用资源 –请求和保持:进程在请求其余资源时,不主动释放已经占用的资源 –非剥夺 快来打我*/ 2022年06月13日 12:57/ 0 赞/ 310 阅读
相关 死锁 死锁: 指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统 柔情只为你懂/ 2022年05月22日 07:43/ 0 赞/ 284 阅读
相关 死锁 1.死锁的条件 死锁有三个必要条件: 1) 互斥——一次只有一个进程可以使用一个资源。其他进程不可访问已分配给其他进程的资源。 2) 占有且等待— 爱被打了一巴掌/ 2022年03月15日 10:16/ 0 赞/ 167 阅读
相关 死锁 一、什么是死锁 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。 死锁是指两个或两个以上的进程(线程)在运行过 ╰+哭是因爲堅強的太久メ/ 2022年01月27日 04:49/ 0 赞/ 494 阅读
相关 死锁 一、死锁的概念 死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象。若无外力作用,事务都将无法推进下去。 解决死锁问题最简单的方式 快来打我*/ 2021年12月09日 01:04/ 0 赞/ 434 阅读
相关 死锁 关于死锁的一些结论: 参与死锁的进程数至少为两个 参与死锁的所有进程均等待资源 参与死锁的进程至少有两个已经占有资源 死锁进程是系统中当前进程集 你的名字/ 2021年11月04日 15:12/ 0 赞/ 432 阅读
还没有评论,来说两句吧...