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