繁体   English   中英

C强制线程在pthread_create之后立即启动。 pthread_create之后是pthread_yield?

[英]C force the thread to start immediately after pthread_create. pthread_yield after pthread_create?

我正在努力实现以下目标:

pthread_create()之后立即强制新创建的线程开始运行。 没有使用实时调度。

pthread_create()手册页中

除非采用实时调度策略,否则在调用pthread_create()之后,不确定哪个线程(调用者或新线程)接下来将执行。

哪个当然有意义。 因此,我认为通过使用pthread_yield()可以强制新创建的线程接管并因此开始。 但这种情况并非如此。

我只能通过在pthread_create()之后休眠来获得所需的结果。 但是我不想依靠这个解决方案。

  1. 为什么我无法通过pthread_yield()实现我的目标?
  2. 除了使用睡眠以外,还有其他方法吗?
  3. 新线程的创建与任务切换的处理方式相同,即是否遵循调度策略? 例如,在RT(抢占式)调度中,如果新创建的线程具有更高的优先级,它将立即抢占当前线程吗?

相关文章:

谢谢!

如果您使用的是多核系统,则可能会将新线程安排在与创建它的线程不同的内核上。 调用pthread_yield()可能不会达到预期的效果,因为它可能只影响调用者核心的调度,而不会影响其他任何核心。 效果通常是将线程放在可运行队列的末尾。 (还值得注意的是, pthread_yield()不是标准的系统调用,因此没有关于其预期行为的标准参考。)

如果睡眠时间不为零,则调用sleep()可能会产生不同的结果。 该线程实际上放置在计时器唤醒队列中,并且在计时器到期后必须将其移回可运行队列。 这将更有可能在创建线程唤醒之前在其他内核上运行新线程。

如果新线程的优先级高于创建它的线程,它将优先于创建线程。

如注释中所建议,可以通过使创建线程有条件地等待来自新创建线程的信号来实现可预测的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM