sched_yield在这种情况下做了什么?

时间:2013-04-25 13:55:16

标签: c linux gcc x86-64

如果我的进程的所有线程都在不同的核心上运行,那么sched_yield会做什么呢?放弃并立即再次发布?因为我看到的是sched_yield不会导致线程调用它,所以等待任何循环,似乎调用甚至没有进入内核。

2 个答案:

答案 0 :(得分:4)

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

所以在您的情况下 sched_yield会立即立即返回,如果没有线程等待当前核心。

请注意,sched_yield 旨在控制线程在多个CPU上的运行方式。

答案 1 :(得分:3)

手册页说:

  

如果调用线程是唯一具有最高优先级的线程   在那个时候,它会在调用sched_yield()之后继续运行。

因此,如果没有什么比运行更重要,那么该函数基本上什么也不做。