多线程死锁的原因,用GDB如何调试

前言

在找工作中,面试问到了这个,啥也不会,现在记录一下

一 死锁原因

多线程死锁的原因是多个线程同时被阻塞,它们中的一个或全部都在等待某个资源被释放,而该资源又被其他线程锁定。

产生死锁的四个必要条件:

  • 互斥
  • 不可抢占
  • 请求保持
  • 循环等待

死锁原因:

  • 资源不够
  • 进程推进顺序不合适

避免死锁方法:

  • 加锁顺序
  • 加锁实现
  • 死锁检测

二 用GDB调试死锁线程

2.1 详细过程

https://blog.csdn.net/atinybirdinit/article/details/41550149

/*
  死锁调试
  1) -g参数
  2) attach
  3) info threads
  4) thread + number切换到对应的线程或thread apply all bt全部设置断点
*/

在这里插入图片描述

2.2 笔记记录

<1> 查找进程id,即PID

ps -e | grep a.out

<2> 启动 gdb attach 进程

gdb a.out 12826 // 12826是PID

info threads //显示所有线程信息

thread 2 // 选择进入第二个线程

bt //查看线程2的堆栈,可以发现该线程堵塞在lock.c第17行

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值