我在Linux(3.4)中有一个实时线程。在某些条件下,即使它没有完成当前时间片的使用,我也希望它将控制权交给具有相同优先级的其他线程。我想用下面的代码:从linux内核产生
if (condition) {
resched_task();
cond_resched();
}
不过,我没有看到任何人在代码中这样做,让我觉得有一些其他的(更好吗?)这样做的方式。有没有一个标准的方法来做到这一点?
我在Linux(3.4)中有一个实时线程。在某些条件下,即使它没有完成当前时间片的使用,我也希望它将控制权交给具有相同优先级的其他线程。我想用下面的代码:从linux内核产生
if (condition) {
resched_task();
cond_resched();
}
不过,我没有看到任何人在代码中这样做,让我觉得有一些其他的(更好吗?)这样做的方式。有没有一个标准的方法来做到这一点?
您可以使用sched_yield()函数来产生时间片的其余部分,即as discussed here。
sched_yield()会导致调用线程放弃CPU。线程移动到队列的末尾以获得其静态优先级,并且新线程运行。
谢谢。你不知道sched_yield()和yield()之间的区别吗? – John
@John你在说什么yield()函数?我不知道一个简单的'yield()',对不起。 – TypeIA
在core.c(第5029行)中,有一个叫做yield的函数。在函数的顶部有一个很大的警告:'千万不要使用这个函数,有99%的机会你做错了。'...它最终调用sys_sched_yield(),这让我有点疲倦。 – John