我正在研究linux-3.2.9内核,在sched_rt.c函数pick_next_highest_task_rt()中有一个for循环,它查看所有的rt_rq来查找(下一个)最高的任务。但我对这个"if“条件感到困惑:
for_each-leaf_rt-rq(rt_rq, rq)
....
if (next && next->prio < idx)
continue;在这里,next是一个task_struct *,如果已经找到了一个,idx是当前rt_rq上的最高优先级(较低的数值)。在上面的代码中,如果next->prio == idx,那么if条件将失败,我们将去扫描当前的rt_rq。但我认为这将是浪费时间,因为我们将找到的最高优先级任务将具有优先级idx,这与next指出的任务的优先级相同。那么if条件不应该是:
if (next && next->prio <= idx)
continue;??
谢谢,迈克尔
发布于 2012-03-13 16:40:08
它看起来像是一个小bug;请关注内核邮件列表。配上一块补丁,你就会出名。:)
https://stackoverflow.com/questions/9631099
复制相似问题