2

如果我有一个进程,其所有线程都在不同的内核上运行,那么sched_yield在这种情况下会做什么?放弃并立即再次发行?因为我看到的是sched_yield不会导致线程调用它,根本等待任何周期,似乎调用甚至没有进入内核。

4

2 回答 2

4

就linux内核而言,一个核心就是一个CPU,所以sched_yield会导致调用线程放弃CPU,但如果线程是队列中唯一的一个,它不会等待任何循环。

因此,如果当前核心上没有等待线程,那么在您的情况下sched_yield会立即返回。

请注意,sched_yield并非旨在控制线程如何在多个 CPU 上运行。

于 2013-04-25T13:58:20.733 回答
3

手册页说:

如果调用线程是当时最高优先级列表中的唯一线程,则在调用 sched_yield() 后它将继续运行。

所以如果没有什么更重要的东西要运行,这个函数基本上什么都不做。

于 2013-04-25T13:58:15.790 回答