美文网首页
锁顺序死锁

锁顺序死锁

作者: KeDaiBiaO1 | 来源:发表于2017-11-14 11:41 被阅读0次

死锁形成的几个必要条件
1、互斥
2、等待
3、不可抢占
4、循环等待

避免死锁的方法就是,打破任一个必要条件。循环等待最容易打破。
科学家进餐问题。(都是在获取左边的锁,)

abcde5个科学家顺时针坐在圆桌上(按先获取左边的锁,再去获取右边的)
假如 a要获取b的锁(right锁),(如果a现在无法获取b的锁,证明b现在有左边的锁,而且右边的锁没有被占用,b同时占用了2个锁之后执行结束释放左右的锁)a在b释放锁之后获取b的锁(也就是right锁)

简单的锁顺序死锁
一个操作是先获取左边的锁然后获取右边的锁,另一个操作先获取右边的锁然后获取左边的锁。
当一个线程获取了左边的锁之后准备去获取右边的锁,但是另一个线程获取了右边的锁,正准备获取左边的锁。这样锁都不会被释放形成死锁。

解决方法:

制定一个获取锁的顺序, 两个操作都先获取left或者先获取right(操作获取锁顺序是一致的)。


相关文章

  • 死锁

    线程饥饿死锁 锁顺序死锁 动态锁顺序死锁通过锁顺序来避免死锁 避免死锁

  • 死锁

    在JAVA编程中,有3种典型的死锁类型: 静态的锁顺序死锁 动态的锁顺序死锁 协作对象之间发生的死锁 静态的锁顺序...

  • java并发编程实战10:活跃性、性能与测试

    10.1 死锁 10.1.1 锁顺序死锁 如果所有线程以固定的顺序来获得锁,那么在程序中就不会出现锁顺序死锁问题。...

  • Java concurrency《防止死锁》

    Java concurrency《防止死锁》 常见预防死锁的办法 有顺序的锁 具有超时时间的锁 死锁的检测 有顺序...

  • Java死锁笔记

    锁顺序死锁 动态锁顺序死锁 如果两个线程同时调用transferMoney()线程A从X账户向Y账户转账线程B从账...

  • 锁顺序死锁

    死锁形成的几个必要条件1、互斥2、等待3、不可抢占4、循环等待 避免死锁的方法就是,打破任一个必要条件。循环等待最...

  • 如何去检测死锁

    如何检测死锁 死锁预防 让线程获取锁的顺序一致 死锁检测 jps 查看java 进程信息 jstack +进程号 ...

  • Java并发编程 -- 活跃性、性能与测试

    一、避免活跃性危险 1.死锁 锁顺序死锁:在线程A持有锁L并想获得锁M的同时,线程B持有锁M并尝试获得锁L,那么这...

  • Android死锁的场景有哪些?

    常见的死锁的场景 下面分析几种常见的死锁形式: 锁顺序死锁 上述代码中,如果一个线程调用lockAtoB(),另一...

  • 如何避免死锁

    避免死锁主要有 3种方式 加锁顺序 加锁时限 死锁检测 加锁顺序 一个线程如果要获取多个锁,必须按照一定的顺序去获...

网友评论

      本文标题:锁顺序死锁

      本文链接:https://www.haomeiwen.com/subject/pcvxvxtx.html