【lockcop】使用lockcop软件检测c++死锁

您所在的位置:网站首页 5600x锁44 【lockcop】使用lockcop软件检测c++死锁

【lockcop】使用lockcop软件检测c++死锁

2023-06-09 20:10| 来源: 网络整理| 查看: 265

【lockcop】使用lockcop软件检测c++死锁 背景:

C++多线程开发中,容易出现死锁导致程序挂起的现象。

工具:

lockcop.exe,下载见:

链接:https://pan.baidu.com/s/1KRA1kzB6kvv2iqU_s7z5dA?pwd=53gd 提取码:53gd

测试过程

1.使用VS2017编写一段代码,见下面,调试运行起来,程序名为memeroy.exe,

CRITICAL_SECTION cs1; CRITICAL_SECTION cs2; CRITICAL_SECTION csprint; //初始化关键代码段 void InitMyCriticalSection(); void InitMyCriticalSection() { InitializeCriticalSection(&cs1); InitializeCriticalSection(&cs2); InitializeCriticalSection(&csprint); } //删除关键代码段 void DeleteMyCriticalSection(); void DeleteMyCriticalSection() { DeleteCriticalSection(&cs1); DeleteCriticalSection(&cs2); DeleteCriticalSection(&csprint); } //打印信息 void PrintString(std::string str); void PrintString(std::string str) { std::cout EnterCriticalSection(&cs1); Sleep(100); EnterCriticalSection(&cs2); PrintString(str); LeaveCriticalSection(&cs2); LeaveCriticalSection(&cs1); } return 1; } DWORD WINAPI Thread2(LPVOID lpParameter); DWORD WINAPI Thread2(LPVOID lpParameter) { std::string str = std::to_string(GetCurrentThreadId()); str = "Thread2 id is" + str; PrintString(str); for (int i = 0; i std::string str = std::to_string(GetCurrentThreadId()); str = " main Thread id is" + str; PrintString(str); //初始化关键代码段 InitMyCriticalSection(); //创建线程 HANDLE hThread1 = CreateThread(NULL, 0, Thread1, NULL, 0, NULL); HANDLE hThread2 = CreateThread(NULL, 0, Thread2, NULL, 0, NULL); //等待线程结束 WaitForSingleObject(hThread1, INFINITE); WaitForSingleObject(hThread2, INFINITE); //关闭线程句柄 CloseHandle(hThread1); CloseHandle(hThread2); //释放关键代码段 DeleteMyCriticalSection(); return 1; }

2.运行lockcop软件,在processes找到memeroy.exe进行监控。现象见下图: 在这里插入图片描述 在这里插入图片描述

1.线程32064:等待线程33212、线程33236完成 2. 线程33212和线程33236发生死锁现象。 死锁修改

线程互斥进行修改,Thread1与Thread2对关键代码段的进入与退出顺序改为相同。即只修改线程2的代码。 在这里插入图片描述

现象是:主线程在等待,线程1在执行,线程2里面阻塞了。

在这里插入图片描述

在这里插入图片描述

再修改代码,使其恢复正常。只修改线程1,2里面执行sleep函数的位置。

在这里插入图片描述

现象正常,现象是:主线程在等待,线程1线程2都在执行了,没有死锁。 在这里插入图片描述

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3