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;
}

编译运行: 

调试过程:

 

posted @   TechNomad  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示