java2d死锁_windbg 经典死锁调试

代码

48304ba5e6f9fe08f3fa1abda7d326ab.png//Deadlock_Debug.cpp : 定义控制台应用程序的入口点。//#include"stdafx.h"#include"windows.h"#include

//All the thread must get all of critial_section//Classic Deadlock

CRITICAL_SECTION gCritSecFirst;

CRITICAL_SECTION gCritSecSecond;

CRITICAL_SECTION gCritSecThird;

unsigned __stdcall Thread1Func(void*dummy)

{

printf("Enter Thread 1 \n");

EnterCriticalSection(&gCritSecThird);

{

Sleep(5000);

EnterCriticalSection(&gCritSecFirst);

EnterCriticalSection(&gCritSecSecond);

LeaveCriticalSection(&gCritSecSecond);

LeaveCriticalSection(&gCritSecFirst);

}

LeaveCriticalSection(&gCritSecThird);

printf("Exit thread func 1 \n");return 1;

}

unsigned __stdcall Thread2Func(void*dummy)

{

printf("Enter Thread 2 \n");

EnterCriticalSection(&gCritSecFirst);

EnterCriticalSection(&gCritSecSecond);

{

Sleep(2000);

EnterCriticalSection(&gCritSecThird);

Sleep(5000);

LeaveCriticalSection(&gCritSecThird);

}

LeaveCriticalSection(&gCritSecSecond);

LeaveCriticalSection(&gCritSecFirst);

printf("Exit thread func 2 \n");return 1;

}int _tmain(int argc, _TCHAR*argv[])

{

unsigned threadID;

InitializeCriticalSection(&gCritSecFirst);

InitializeCriticalSection(&gCritSecSecond);

InitializeCriticalSection(&gCritSecThird);

_beginthreadex( NULL,0, &Thread1Func, NULL, 0, &threadID );

_beginthreadex( NULL,0, &Thread2Func, NULL, 0, &threadID );while(1);return 0;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

这是一个经典死锁,开启两个线程,一个以123的次序拿锁,一个以321次序拿锁,互相等待着对方的锁而均不释放自己手中的锁。(此处锁也指CriticalSection)

比对线程等待的锁 及个锁的拥有者和锁定情况变可以判断

线程编号1e4 也就是线程2 等待004944c0

的锁(根据堆栈的RtlEnterCriticalSection函数部分查看)

0069fe94 0042d714 004944c0 57565554

5b5a5958 ntdll!RtlEnterCriticalSection+0x46 (FPO:

[1,0,0])

而004844c0的锁由线程编号1e0 就是线程1持有

而线程编号1e0 就是线程1 等待004944f0 的锁

该所有线程编号1e4持有

0059fe94 0042d5e0 004944f0 57565554 5b5a5958

ntdll!RtlEnterCriticalSection+0x46 (FPO: [1,0,0])

死锁!!!

找到原因就好修正了。

原文:http://www.cnblogs.com/itdef/p/3759963.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值