线程死锁创建转储文件

  1. import <thread>;
  2. import <iostream>;
  3. import <vector>;
  4. import <mutex>;
  5. using namespace std;
  6. class data_test_c
  7. {
  8. public:
  9. data_test_c() {}
  10. virtual ~data_test_c() { cout << "data_test_c" << endl; }
  11. public:
  12. void set_data(int data)
  13. {
  14. lock_guard<mutex> locker(_mutex);
  15. _data = data;
  16. }
  17. int get_data()
  18. {
  19. lock_guard<mutex> locker(_mutex);
  20. return _data;
  21. }
  22. private:
  23. int _data;
  24. mutex _mutex;
  25. };
  26. class deadlock_test_c
  27. {
  28. public:
  29. deadlock_test_c() {}
  30. virtual ~deadlock_test_c() { cout << "deadlock_test_c" << endl; }
  31. public:
  32. void set_data(int data)
  33. {
  34. lock_guard<mutex> locker(_mutex);
  35. _data.set_data(data);
  36. }
  37. int get_data()
  38. {
  39. lock_guard<mutex> locker(_mutex);
  40. return _data.get_data();
  41. }
  42. private:
  43. data_test_c _data;
  44. mutex _mutex;
  45. };
  46. mutex _mutex1;
  47. mutex _mutex2;
  48. int data1;
  49. int data2;
  50. int do_work_1()
  51. {
  52. std::cout << "线程函数do_work_1开始" << std::endl;
  53. lock_guard<mutex> locker1(_mutex1);
  54. //模拟做一些事情
  55. data1++;
  56. std::this_thread::sleep_for(std::chrono::seconds(1));
  57. lock_guard<mutex> locker2(_mutex2);
  58. data2++;
  59. std::cout << "线程函数do_work_1结束" << std::endl;
  60. return 0;
  61. }
  62. int do_work_2()
  63. {
  64. std::cout << "线程函数do_work_2开始" << std::endl;
  65. lock_guard<mutex> locker2(_mutex2);
  66. //模拟做一些事情
  67. data2++;
  68. std::this_thread::sleep_for(std::chrono::seconds(1));
  69. lock_guard<mutex> locker1(_mutex1);
  70. data1++;
  71. std::cout << "线程函数do_work_2结束" << std::endl;
  72. return 0;
  73. }
  74. int main(int argc, char** argv)
  75. {
  76. thread t1(do_work_1);
  77. thread t2(do_work_2);
  78. t1.join();
  79. t2.join();
  80. cout << "线程运行结束" << endl;
  81. return 0;
  82. }

创建一个转储文件

image.png
image.png
image.png
image.png
将转储文件与程序放在同一目录中
使用VS2022打开DMP文件
image.png
image.png
image.png
查看堆栈信息

MFC

参考