当前位置: 首页 > news >正文

Windows C++ 排查死锁

开发出来应用程序突然间卡死不动,如果其中是因为死锁问题卡列该如何排查
下面是一个简单的死锁例子

#include <iostream>
#include <thread>
#include <mutex>

std::mutex a, b;

void function_a() {
	std::lock_guard<std::mutex> _x(a);
	std::this_thread::sleep_for(std::chrono::milliseconds(500));
	std::lock_guard<std::mutex> _y(b);
}

void function_b() {
	std::lock_guard<std::mutex> _y(b);
	std::lock_guard<std::mutex> _x(a);
}


int main() {
	std::thread t1(function_a);
	std::thread t2(function_b);

	t1.join();
	t2.join();
	return 0;
}

以Debug模式编译运行后,毫无意外的没反应了。
现在打开任务管理器,找到进程
在这里插入图片描述
CPU利用率0,显然不太会有死循环,右键"转到详细信息",然后"分析等待链"。
在这里插入图片描述
在这里插入图片描述

线程18208 在等待11188结束,线程11188 卡住了。
现在可以打开WinDbg,Attach 到目录进程,在这之前要设置好符号目录,这些步骤就跳过。

现在直接!threads查看有哪些线程
在这里插入图片描述
计算下11188 是哪一条
在这里插入图片描述
切换到2bb4
在这里插入图片描述
看看调用堆栈
在这里插入图片描述
找到问题源码
在这里插入图片描述
现在可以分析代码了

http://www.dtcms.com/a/107879.html

相关文章:

  • MIT6.S081 - Lab6 Copy-on-Write(写时复制)
  • 模拟集成电路设计与仿真 : Mismatch
  • 数据库 第一章 MYSQL基础(4)
  • 《汽车噪声控制》课程作业
  • 英飞凌高信噪比MEMS麦克风驱动人工智能交互
  • Pandas基础及series对象
  • Token是什么?
  • 时序数据库 InfluxDB(六)
  • Python爬虫第一战(爬取优美图库网页图片)
  • *快排延伸-自省排序
  • conda activate激活环境失败问题
  • 《雷神之锤 III 竞技场》快速求平方根倒数的计算探究
  • conda 激活环境vscode的Bash窗口
  • 数据清洗的具体内容
  • 【Linux】手动部署并测试内网穿透
  • Python基础语法 - 判断语句
  • ffmpeg命令整理
  • 从零开始学习Slam|ICP原理与应用
  • Sentinel实战(三)、流控规则之流控效果及流控小结
  • OpenIPC开源FPV之Adaptive-Link新版本算法v0.60.0
  • 强大而易用的JSON在线处理工具
  • python网络爬虫开发实战之Ajax数据提取
  • 链表的操作-反转链表
  • spring 设计模式、核心模块
  • 创建Linux虚拟环境并远程连接,finalshell自定义壁纸
  • 最短路径:Bellman-Ford算法
  • 抽象类与接口:特征与比较
  • 【实用技巧】电脑重装后的Office下载和设置
  • 自动化测试(web测试)
  • vue-系统登录后进入页面【el-input】输入框无法正常显示?需要手动刷新才可以恢复设置样式?让我来瞅瞅~