首页 > 其他分享 >死锁

死锁

时间:2023-05-28 22:45:45浏览次数:38  
标签:请求 互斥 死锁 线程 条件 资源

死锁产生的条件:两个或者多个线程相互占用对方想要请求的资源,就会产生死锁。

死锁的四个必要条件:

(1)互斥条件:同一时刻只有一个线程持有锁。

(2)请求与保持条件:一个线程因请求资源而阻塞,对已持有的资源保持不放。

(3)不可剥夺条件:线程在没有使用完自己持有的资源时,其它线程不能剥夺该线程的资源,只能有线程自己使用完释放资源。

(4)循环等待条件:若干线程之间头尾相接形成一种环形等待资源的关系。

避免死锁的方法:打破死锁的四个必要条件其中一个就可以避免死锁。

(1)互斥条件无法打破,因为锁本身就是互斥的。

(2)通过一次性请求所有资源可以打破请求与保持条件。

(3)允许线程强行从占有者那里获取某些资源可以打破不可剥夺条件。

(4)实行资源有序分配策略可以打破循环等待条件。

(5)锁排序法:线程只有获取A锁才能获取B锁。

如何进行死锁诊断:

当程序出现了死锁现象,我们可以使用jdk自带的工具:jps和 jstack。

 

 

标签:请求,互斥,死锁,线程,条件,资源
From: https://www.cnblogs.com/yhb-blogs/p/17439050.html

相关文章

  • Oracle 死锁与慢查询总结
    查看死锁SELECTs.sid"会话ID",s.lockwait"等待锁",s.event"等待的资源/事件",--最近等待或正在等待的资源/事件DECODE(lo.locked_mode,0,'尚未获得锁',1,NULL,2,'行共享锁',3,'行排它锁',4,'共享表锁',5,'共享行排它锁',6,......
  • 【MySQL】【锁】MySQL 死锁了,怎么办
    1  前言MySQL会发生死锁么,当然会,有锁的地方,有多个事务的地方,就会出现互相争夺对方资源的情况,就会产生僵持,比如我们的业务场景:主要逻辑就是新增订单、修改订单、查询订单等操作。然后因为订单是不能重复的,所以当时在新增订单的时候做了幂等性校验,做法就是在新增订单记录之前,先......
  • oracle死锁产生成原因和解决方案
    表1.进行update、delete操作的窗口没有提交有在另一个窗口执行了更新或者删除动作。2.在外键上没有加索引引起的死锁(这个要注意,设置了外键同时增加索引)3.两个表之前不同顺序之间的相互更新操作引起的死锁(如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低) 解锁......
  • Java-Day-23( 线程二:线程终止 + 常用方法 + 用户线程 + 守护线程 + 线程生命周期 + Syn
    Java-Day-23线程终止setLoop()基本说明当线程完成任务后,会自动退出还可以通过使用变量来控制run方法退出的方式停止线程,即通知方式练习使用publicclasstest1{publicstaticvoidmain(String[]args)throwsInterruptedException{Tt1=newT();......
  • python高级技术(死锁、递归锁、信号量、Event时间、进程池、线程池、协程)
    一死锁和递归锁(了解)进程也有死锁与递归锁,使用方法类似所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。当你知......
  • 死锁的概念
    死锁的概念1、什么是死锁2、死锁、饥饿、死循环的区别3、死锁产生的必要条件4、什么时候会发生死锁5、死锁的处理策略知识回顾......
  • 应用服务器查看代码是否存在死锁死循环
    top命令查看应用,数据库在服务器上cpu运行情况在服务器查看应用存在的死锁死循环【1】top   -- 查看java的pid【2】ps-mppid-oTHREAD,tid,time-- (java的pid)【3】printf"%x"tid(4836)  --打印cpu高的tid【4】cd/usr/java/jdk1.8.0_261/bin【5】jstackpid......
  • SQL Server事务执行过程中中释放锁导致的死锁问题 - 排查与分析
    0.前情提要系统的某个用来上报数据的接口存在死锁的问题。这个接口内部对多张表进行了Update操作,执行顺序为A表、B表、C表、D表、A表。死锁发生的SQL,一条是第一次更新A表的SQL,另一条是第二次更新A表的SQL。整个更新都处在一个事务内,理论上讲,只要第一个Session开始执行事务,第二个......
  • 【解决方案】MySQL死锁解决案例
    说明:该场景为商品库存操作更新MySQL时发生的数据库死锁,如果你没有做过库存系统经验,也可以把方案应用到(优惠券库存or活动库存or抽奖礼品库存等等),只要符合同时更新多条记录时均可。背景:库存系统组合品是由多个单品组合而成,更新数据库时先组装数据再批量更新多个sku。组合品关系......
  • 举一个数据库死锁的例子,MySQL 怎么解决死锁?
    转载:https://juejin.cn/post/7072000882128191518分析&回答在数据库中有两种基本的锁类型:排它锁(ExclusiveLocks,即X锁)和共享锁(ShareLocks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基......