我正在努力实现以下目标:
在pthread_create()
之后立即强制新创建的线程开始运行。没有使用实时调度。
除非是实时调度策略 在调用pthread_create()后,它正在被使用 不确定哪个线程 - 调用者或新线程 - 接下来 执行。
当然这是有道理的。因此,我想通过使用pthread_yield()
我将强制新创建的线程接管并因此开始。但事实并非如此。
我只能在pthread_create()
之后通过睡眠获得所需的结果。但我不想依赖这个解决方案。
pthread_yield()
实现我的目标?相关文章:
谢谢!
答案 0 :(得分:0)
如果您使用的是多核系统,那么您的新线程可能会在与创建它的线程不同的核心上进行调度。调用pthread_yield()
可能没有预期的效果,因为它可能只影响调用者核心的调度,而不影响任何其他核心。效果通常是将线程放在可运行队列的末尾。 (值得注意的是pthread_yield()
不是标准系统调用,因此没有关于其预期行为的标准参考。)
如果睡眠时间非零,则调用sleep()
可能会产生不同的结果。该线程实际上放在一个定时器唤醒队列中,并且必须在定时器到期后移回可运行队列。这将使创建线程唤醒之前更有可能在不同核心上运行新线程。
如果新线程的优先级高于创建它的线程,它将抢占创建线程。
根据评论中的建议,可以通过使创建线程有条件地等待来自新创建的线程的信号来实现可预测的行为。