嵌入式技术william hill官网
直播中

李萍

7年用户 1427经验值
私信 关注
[问答]

所有线程都处于ready状态但都不运行的原因?如何解决?

如图所示,我自己的工程创建了5个线程,加上系统自身的两个线程(idle和finsh),共7个线程在跑,现在出现的情况是:
1、除了最高优先级的线程(tshell)外,其余所有线程都没有响应了,这些线程的任务都停止了。

图中的semaphore,event,mutex以及内存使用我都用finsh打印出来了,都是出现问题后才打印的,目前不知道问题出在哪,请教一下各位坛友,有没有遇到类似的情况或问题?如何解决?谢谢!
1.png

回帖(3)

LL-LING宁

2023-8-4 16:23:45
单步调一下?看看shell结束后,选取的最高优先级是哪个线程?以及为什么没有且过去?
比如调度锁之类的?
举报

jf_75850444

2023-8-7 09:03:10
就绪态(RT_THREAD_READY):该线程就在就绪列表中,就绪的线程已经具备执行的能力,只等待CPU运行。调整线程优先级试试,另外检查线程循环中是否有延时函数,使得内核能够切换到其他线程
举报

京五环以外

2023-10-16 10:31:05
造成所有线程都处于ready状态但都不运行的原因有很多,比如死锁、竞争、信号量使用不当等等。需要具体分析情况才能得到准确的答案。以下提供一些可能的解决方案:

1. 分析各个线程间的依赖关系,检查是否存在死锁或竞争等问题。

2. 检查信号量、事件、互斥量等资源的使用是否合理,是否存在资源泄露等问题。

3. 考虑降低线程优先级,以避免饥饿问题。

4. 尝试添加调试信息,跟踪线程执行过程,找出问题所在。

5. 如果无法解决问题,可以考虑使用调试工具,如gdb等逐步分析程序的运行情况,找出问题所在。

需要注意的是,可能存在多个因素导致线程停止执行,需要综合考虑各种可能性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分