SPIN LOCK死锁问题

背景

板卡升级版本后,初始化疑似未执行完,SSH无法连接,可以PING通。

问题定位

通过查看控制台的打印,可以看到,初始化运行到了57一半,就卡住了。
两次控制台输入i(这个命令是我们内部实现的,功能和vxworks的类似,打印一些任务状态),只有PID为1785的程序执行时间在增长,怀疑任务陷入死循环。控制台查看其堆栈:

     [<0x2b55ad04>] (pthread_spin_lock + 0x4)

该任务在持续获取一把自旋锁。通过在正常版本查看,优先级为16的实时任务为logTask,负责向控制台输出打印。PID为1782的应该为主线程,负责执行初始化,查看其堆栈如下:

    tt 1782
    [<0x2b55ad4c>] (pthread_spin_trylock + 0x1c)
    value = 2 = 0x2

至此,怀疑logTask任务以及主线程任务,由于SPIN LOCK,互相锁死。查看BSP代码,用到的自旋锁变量为g_LogMsgBuf_sl,查看其内容:

    g_LogMsgBuf_sl
    g_LogMsgBuf_sl = 0x837078:  value = 1 = 0x1

可以看到,其值为1,说明已经有人拿到这把锁。由于两个任务优先级不同,主线程为非实时优先级,logTask为实时优先级,怀疑主线程在拿到锁后,被log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值