如果我的进程的所有线程都在不同的核心上运行,那么sched_yield
会做什么呢?放弃并立即再次发布?因为我看到的是sched_yield
不会导致线程调用它,所以等待任何循环,似乎调用甚至没有进入内核。
答案 0 :(得分:4)
就linux内核而言,一个核心是一个CPU,因此sched_yield
会导致调用线程放弃CPU,但如果线程是队列中唯一的一个,它就不会等待任何周期。
所以是在您的情况下 sched_yield
会立即立即返回,如果没有线程等待当前核心。
请注意,sched_yield
不旨在控制线程在多个CPU上的运行方式。
答案 1 :(得分:3)
手册页说:
如果调用线程是唯一具有最高优先级的线程 在那个时候,它会在调用sched_yield()之后继续运行。
因此,如果没有什么比运行更重要,那么该函数基本上什么也不做。