【发布时间】:2013-04-25 13:55:16
【问题描述】:
如果我有一个进程,其所有线程都在不同的内核上运行,那么sched_yield 在这种情况下会做什么?放弃并立即再次发行?因为我看到的是sched_yield不会导致线程调用它,根本等待任何循环,似乎调用甚至没有进入内核。
【问题讨论】:
如果我有一个进程,其所有线程都在不同的内核上运行,那么sched_yield 在这种情况下会做什么?放弃并立即再次发行?因为我看到的是sched_yield不会导致线程调用它,根本等待任何循环,似乎调用甚至没有进入内核。
【问题讨论】:
就linux内核而言,一个核心就是一个CPU,所以sched_yield会导致调用线程放弃CPU,但如果线程是队列中唯一的一个,它不会等待任何循环.
所以是在你的情况下sched_yield会立即返回如果当前核心上没有线程等待。
请注意,sched_yield并非旨在控制线程在多个 CPU 上的运行方式。
【讨论】:
_syscall0(int, sched_yield)
手册页说:
如果调用线程是最高优先级的唯一线程 列表,它会在调用 sched_yield() 后继续运行。
所以如果没有更重要的事情要运行,这个函数基本上什么都不做。
【讨论】: