maple_wasp
驱动牛犊
驱动牛犊
  • 注册日期2003-10-02
  • 最后登录2009-03-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望22点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:1475回复:2

任务调度问题,请大侠支招!

楼主#
更多 发布于:2004-05-20 22:31
偶创建了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却永远不被执行?
yxdlbbwc
驱动牛犊
驱动牛犊
  • 注册日期2004-05-20
  • 最后登录2004-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-21 09:31
在t1,t2中都加上taskDelay()语句试试!
maple_wasp
驱动牛犊
驱动牛犊
  • 注册日期2003-10-02
  • 最后登录2009-03-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望22点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-21 18:59
请问taskDelay(0)应该加在何处,是加在semTake()之前还是之后?
游客

返回顶部