首页 > 其他分享 >死锁

死锁

时间:2023-06-08 16:48:12浏览次数:35  
标签:申请 死锁 线程 进程 等待 资源

死锁的定义:多个进程相互等待对方资源,在得到所有的资源继续运行之前,都不会释放自己的资源,造成了循环等待的现象,称为死锁。

死锁产生的必要条件:1.资源互斥:每一个资源只能给一个进程使用,资源不能共享使用。2.占有和等待:已经得到资源的进程还能继续申请新的资源。3.非抢占:当一个资源分配给一个进程后,其他需要该资源的进程不能强制性获取该资源。4.环路等待:有多个进程形成了一个封锁循环链,链上的每一个进程都在等待一个下一个进程的资源。

死锁预防:破坏死锁的必要条件

死锁避免:用银行家算法算出执行进程的序列,但是一般是没什么用的,因为进程的需要资源是未知的,当一个线程申请的资源大于可利用资源时,就直接申请失败如果申请的资源小于等于可利用资源的时候,就进行安全检测。检查什么呢?如果将资源分配给线程后,是否存在一条安全执行序列,使各个线程都能安全执行,不发生死锁。如果存在就给其分配资源。如果不存在就申请失败。

死锁恢复:抢占,回滚:周期性进行检查,每一次都将进程状态存到文件中,当发生死锁时回滚到更早的状态。杀死进程。

标签:申请,死锁,线程,进程,等待,资源
From: https://www.cnblogs.com/october-sy/p/17466901.html

相关文章

  • 死锁编码与定位分析
    死锁编码与定位分析文章目录死锁编码与定位分析1.理论2.代码验证3.查找死锁故障1.理论死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相符待的现象,岩无外力干涉那它们都将无法推进下去。如果系统资源充足,过程的资源请求都能够得到满足,死锁出现的可能性就......
  • mysql死锁检查
    描述以下是一个shell脚本,用于检查MySQL死锁会话并杀死它们。它还将记录所有被杀死的会话及其相关的SQL到一个文件中。解决方案#!/bin/bash#设置MySQL连接参数MYSQL_USER="your_mysql_username"MYSQL_PASSWORD="your_mysql_password"MYSQL_HOST="localhost"MYSQL_PORT="......
  • 银行转账问题(死锁)
    本文主要讲述死锁的一个经典案例—银行转账问题,并对该问题进行定位、修复。1.问题说明当账户A对账户B进行转账时,首先需要获取到两把锁:账户A和账户B的锁。获取两把锁成功,且余额大于0,则扣除转出人的余额,并增加收款人的余额,而且这些操作都是在一个原子操作中获取锁的顺序相......
  • 哲学家就餐问题(死锁)
    本文主要讲述死锁的一个经典案例—哲学家就餐问题,并对该问题进行修复。1.问题描述看上图,有五位哲学家,每天循环做两件事:思考,吃面。吃面时每人面前都有一个盘子,盘子左边和右边都有一根筷子,他们在吃面之前需要先拿起左边的筷子再拿起右边的筷子,有了一双筷子就可以吃面了。具体......
  • 死锁细究
    一、死锁的定义&危害1、死锁是什么发生在并发中互不想让:当两个(或更多)线程(或进程)相互持有对方所需要的资源,又不主动释放,导致所有人都无法继续前进,导致程序陷入无尽的阻塞,这就是死锁。多个线程造成死锁的情况如果多个线程之间的依赖关系是环形,存在环路的锁的依赖关系,那么......
  • Oracle 死锁与慢查询总结
    查看死锁SELECTs.sid"会话ID",s.lockwait"等待锁",s.event"等待的资源/事件",--最近等待或正在等待的资源/事件DECODE(lo.locked_mode,0,'尚未获得锁',1,NULL,2,'行共享锁',3,'行排它锁',4,'共享表锁',5,'共享行排它锁',6,......
  • 死锁的产生及避免
    资料什么是死锁?死锁的产生条件及解决办法什么是死锁,死锁的原因及解决办法(含四个必要条件)死锁的产生原因与解决方法Java实例-死锁及解决方法实例产生死锁的四个必要条件:1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用2、不可抢占,资源请求者不能强制从资源占有者手......
  • 并发中致命的死锁
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号!作者:王军伟Tech||慕课网讲师1.前言本文内容主要是对死锁进行深入的讲解,具体内容点如下:理解线程的上下文切换,这是本节的辅助基础内容,从概念层面进行理解即可;了解什么是线程死锁,在并发编程......
  • gdb调试c++多线程死锁问题初步
    https://blog.csdn.net/zsiming/article/details/126695393 总结:psaux|grepfilename //找出进程IDtop-HpPID //列出进程号为PID下的所有线程gdbatattchPID //用gdb调试正在运行的进程(进程号为PID)(需要sudo权限)threadapplyallbt //这里涉及2个命令:thr......
  • 死锁
    死锁产生的条件:两个或者多个线程相互占用对方想要请求的资源,就会产生死锁。死锁的四个必要条件:(1)互斥条件:同一时刻只有一个线程持有锁。(2)请求与保持条件:一个线程因请求资源而阻塞,对已持有的资源保持不放。(3)不可剥夺条件:线程在没有使用完自己持有的资源时,其它线程不能剥夺该线程......