GDB调试之多线程死锁调试(二十四)
调试代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <thread> #include <iostream> #include <vector> #include <mutex> using namespace std; mutex _mutex1; mutex _mutex2; int data1; int data2; int do_work_1() { std::cout << "线程函数do_work_1开始" << std::endl; lock_guard<mutex> locker1(_mutex1); //模拟做一些事情 data1++; std::this_thread::sleep_for(std::chrono::seconds(1)); lock_guard<mutex> locker2(_mutex2); data2++; std::cout << "线程函数do_work_1结束" << std::endl; return 0; } int do_work_2() { std::cout << "线程函数do_work_2开始" << std::endl; lock_guard<mutex> locker2(_mutex2); //模拟做一些事情 data2++; std::this_thread::sleep_for(std::chrono::seconds(1)); lock_guard<mutex> locker1(_mutex1); data1++; std::cout << "线程函数do_work_2结束" << std::endl; return 0; } int main() { thread t1(do_work_1); thread t2(do_work_2); t1.join(); t2.join(); cout << "线程运行结束" << endl; return 0; } |
编译运行:
调试过程:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?