偶创建了4个任务t1, t2, t3, t4. 任务t1 和t2 的优先级相同,t3低于t1. t4低于t3, 如下:
优先级: t1 = t2 > t3 > t4
关系:t2, t3, t4 是由t1创建的任务,t1是主任务。
四个任务共用一段受互斥的二进制信号量保护的临界区代码(一个全局的数组变量)。
互斥信号量创建使用的是优先级队列.
t1,t2, t3, t4 ,用的都是 semTake(semMutex, WAIT_FOREVER);
问题描述:绝大部分的情况下,四个任务运行都非常的正常。而有时在程序运行后,t2就永远不被执行,用shell的-〉i 命令观察各任务的状态,t2 大部分是处于pend状态,而偶尔处于ready状态。t1 大部分是处于ready状态, 偶尔处于pend或pend + T状态。t3, t4在一切情况下都运行正常。
问题:
1:既然t1,t2的优先级相同,且t2有时也处于ready状态,为什么t2有时会永远不被执行?
2:在不正常的情况下,t2的优先级大于t3和t4,为什么t3,和t4能够被执行而t2却永远不被执行?
共3条
1/1 1 跳转至页
3楼
今天我把优先级改了,t2 = t3 = t4 > t1,并且用了时间片轮转的调度方式,但是有时t2还是一直处于pend状态,而t1,t3, t4 却一直到运行得很正常。是不是t2发生了活锁?t2, t3, t4 是由t1一次创建的。
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |