Linux教程

linux死锁问题定位

本文主要是介绍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还没有释放该锁

 

这篇关于linux死锁问题定位的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!