zoukankan      html  css  js  c++  java
  • windbg定位死锁

    操作系统对死锁的描述如下:

    所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。   

    那么为什么会产生死锁呢?

    1.因为系统资源不足。

    2.进程运行推进的顺序不合适。   

    3.资源分配不当。            

    而产生死锁的条件有四个:

    1.互斥条件:所谓互斥就是进程在某一时间内独占资源。

    2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

    3.不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。

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

    1)  先用!locks查看所有的线程占用的锁

     

    这里可以看到有三个线程正在等待三个锁,第一个线程等待的锁是0043a620,但被5e4这条线程占用,第二个线程等待的锁是0043a844,但被5dc线程占用,

    第三个线程等待的锁是031d40d4,也被5dc线程占用。

    2)接着,我们需要查看5e4线程和5dc线程的id,具体可以通过查看工具栏中Processes and Threads,如下图所示,5e4的线程的id53,5dc线程的id51

     

    3分别输入~53kb~51kb查看这个两个线程的调用栈,结果如下图所示

     

    由数据可知,5e4线程正在等待一把0043a844的锁,而5dc线程也正在等待锁0043a620

    4)结合第一步获取的信息可知,5e4线程要去获取已经被5dc占用的锁0043a844,而5dc又要去获取已经被5e4占用的锁0043a620,如此形成环路,就产生了死锁

     

     

     

  • 相关阅读:
    安卓学习,参数的双向传递
    周进度报告(六)
    TensorFlow K近邻算法
    TensorFlow逻辑回归操作
    TensorFlow线性回归操作
    《出发吧一起》第二阶段个人总结——Day04
    《出发吧一起》第二阶段个人总结——Day03
    《出发吧一起》第二阶段个人总结——Day02
    《出发吧一起》第二阶段个人总结——Day01
    《一起》个人进展--Day10
  • 原文地址:https://www.cnblogs.com/dsky/p/3154851.html
Copyright © 2011-2022 走看看