• 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,如此形成环路,就产生了死锁

     

     

     

  • 相关阅读:
    《大道至简》读后感
    周报告
    关于大脑休息之睡觉与冥想方式对比
    大数据之实验6
    学习进度(16)
    软件工程—个人课程总结
    学习进度(15)
    人月神话阅读笔记03
    学习进度(14)
    软件工程—个人作业(8)
  • 原文地址:https://www.cnblogs.com/dsky/p/3154851.html
Copyright © 2020-2023  润新知