linux死锁问题定位

写一个死锁代码:

#include <mutex> #include <thread> #include <chrono>  std::mutex s_mtx_1; std::mutex s_mtx_2;  int main() {     std::thread thread1([&](){     s_mtx_1.lock();     std::this_thread::sleep_for(std::chrono::milliseconds(2000));     s_mtx_2.lock();});     std::thread thread2([&](){     s_mtx_2.lock();     std::this_thread::sleep_for(std::chrono::milliseconds(2000));     s_mtx_1.lock();});     thread1.join();     thread2.join();     return 0; }

执行g++ main.cpp -lpthread -std=c++11 -g 生成可执行程序

执行程序后发现程序并没有正常退出,实际死锁了

执行 pstack PID 查看堆栈可以发现有死锁

 

 执行 gcore PID, 生成core文件,

 执行 gdb 程序名 core文件,分析堆栈

 

 先看主线程卡在哪里

 

卡在了thread 1

 

 thread 1中有把锁, 该锁的拥有者是thread 2,就是thread 2还没有释放该锁