Linux:多线程——死锁以及使用gdb调试多线程程序时常用的命令

Linux:多线程——死锁以及使用gdb调试多线程程序时常用的命令

死锁

死锁:指在一组进程中的各个进程均占有不是放的资源,但因相互申请被其他进程所占用不会释放的资源而处于的一种永久等待状态。
情况一:当多个执行流使用同一个互斥锁的时候,有一个执行流获取到互斥锁之后,没有释放互斥锁,导致其他执行流都卡死在加锁的接口中的现象被称之为死锁。
情况二:多个执行流,多个互斥锁的情况下,没一个执行流都占有一把互斥锁,但是都想申请对方的互斥锁,这种情况下,就会导致各个指令流都阻塞掉,这种现象称为死锁。
在这里插入图片描述

在这里插入图片描述

死锁产生的四个必要条件

(1) 互斥条件:一个资源每次只能被一个执行流使用
(2)请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放
(3)不可剥夺条件:一个执行流已经获得资源,在未使用完成之前,不能强行剥夺
(4)循环等待条件:若干个执行流之间形成一种头尾相接的循环等待资源的关系

预防死锁

(1)破坏必要条件
(2)加锁顺序一致
(3)不要忘记解锁,在所有的可能导致执行流退出的地方都进行解锁
(4)资源一次性分配

使用gdb调试多线程程序时常用的命令

info threads:查看当前进程的线程
在这里插入图片描述
thread [id] : 切换调试的线程为指定ID的线程
在这里插入图片描述
thread apply all bt:查看多个线程堆栈
在这里插入图片描述
t [线程编号]:跳转到具体线程的堆栈中
在这里插入图片描述

在这里插入图片描述

f[堆栈编号]:跳转到某一个堆栈当中去
在这里插入图片描述
在这里插入图片描述

gdb attach [pid]:将进程附加到gdb

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值