线程死锁创建转储文件
import <thread>;import <iostream>;import <vector>;import <mutex>;using namespace std;class data_test_c{public:data_test_c() {}virtual ~data_test_c() { cout << "data_test_c" << endl; }public:void set_data(int data){lock_guard<mutex> locker(_mutex);_data = data;}int get_data(){lock_guard<mutex> locker(_mutex);return _data;}private:int _data;mutex _mutex;};class deadlock_test_c{public:deadlock_test_c() {}virtual ~deadlock_test_c() { cout << "deadlock_test_c" << endl; }public:void set_data(int data){lock_guard<mutex> locker(_mutex);_data.set_data(data);}int get_data(){lock_guard<mutex> locker(_mutex);return _data.get_data();}private:data_test_c _data;mutex _mutex;};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(int argc, char** argv){thread t1(do_work_1);thread t2(do_work_2);t1.join();t2.join();cout << "线程运行结束" << endl;return 0;}
创建一个转储文件




将转储文件与程序放在同一目录中
使用VS2022打开DMP文件


查看堆栈信息
MFC
参考
