Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从linux内核生成_Linux_Multithreading_Scheduled Tasks_Real Time - Fatal编程技术网

从linux内核生成

从linux内核生成,linux,multithreading,scheduled-tasks,real-time,Linux,Multithreading,Scheduled Tasks,Real Time,我在Linux(3.4)中有一个实时线程。在某些情况下,我希望它将控制权让给具有相同优先级的其他线程,即使它尚未用完当前的时间片。我正在考虑使用以下代码: if (condition) { resched_task(); cond_resched(); } 然而,我在代码中没有看到其他人这样做,这让我觉得还有其他(更好的?)方法。有没有标准的方法可以做到这一点?您可以使用该函数生成剩余的时间片 sched_yield()导致调用线程放弃CPU。线程被移动到队列的末尾以获得其静态

我在Linux(3.4)中有一个实时线程。在某些情况下,我希望它将控制权让给具有相同优先级的其他线程,即使它尚未用完当前的时间片。我正在考虑使用以下代码:

if (condition) {
    resched_task();
    cond_resched();
}
然而,我在代码中没有看到其他人这样做,这让我觉得还有其他(更好的?)方法。有没有标准的方法可以做到这一点?

您可以使用该函数生成剩余的时间片

sched_yield()导致调用线程放弃CPU。线程被移动到队列的末尾以获得其静态优先级,新线程开始运行


这个问题听起来像是在问内核编程,但公认的答案是函数用户模式API sched_yield()。我认为这个问题的核心答案是schedule()

谢谢。你不会知道sched_yield()和yield()之间的区别吧?@John你在说什么yield()函数?对不起,我不知道有一个函数名为yield(),在core.c(第5029行)中,有一个函数名为yield。在这个函数的顶部有一个大警告:
永远不要使用这个函数,有99%的几率你做错了。
。。。它最终调用sys_sched_yield(),这让我有点厌倦了。@John啊,这看起来像内核内部的东西
sched_yield()
是POSIX标准系统调用。我不是内核黑客,但我肯定会使用POSIX调用并尊重您在
core.c
:)
schedule()
中发现的警告,如果时间片未启动,则不会将您置于运行队列的后面,这意味着您会立即再次醒来
yield()
会将您推到后面,让下一个进程运行。经过一些分析,我们发现
yield()
实际上是正确的调用,尽管上面有注释。(注意-这只适用于RR runqueues)@John您确定schedule()不会将其放在队列的末尾吗?那么它的目的是什么呢。我们是不是为了马上醒来而放弃cpu?