gpt4 book ai didi

c++ - 使用 SCHED_RR 调度策略运行的线程的 sched_yield() 的影响

转载 作者:行者123 更新时间:2023-11-30 17:11:24 25 4
gpt4 key购买 nike

我在 Linux 下有一个进程,由两个线程组成,一个生产者和一个消费者。为简单起见,假设这是在单核、单 CPU 架构上的系统中运行的唯一进程。

生产者首先被创建,并使用 sched_setscheduler(0, SCHED_RR, &params) 手动分配 SCHED_RR 调度策略。一段时间后,消耗线程也被创建。由于它是在为生产者调用 sched_setscheduler 之后创建的,因此它没有相同的 SCHED_RR 调度策略集。

在这种情况下,我试图了解生产者的 sched_yield() 的效果(一旦生成一个元素)。

有两种可能性,但我不确定哪一种是正确的:

  1. 消费者可能在生产者再次运行之前被安排执行
  2. 消费者无法被安排执行,因为它没有使用SCHED_RR调度策略运行并且生产者没有完成其分配的任务量子时间或没有 sleep 。在这种情况下,yield() 可能会产生负面影响,因为它没有被调用。

最佳答案

虽然我不确定实践中会发生什么,但正式 sched_yield 不允许在这种情况下运行较低优先级的线程;它只是为了让出相同优先级的线程。

您应该使用条件变量或其他适当的同步机制来确保您的消费者能够运行(生产者应该在队列高于某个充满度阈值或类似阈值的谓词上pthread_cond_wait)而不是尝试进行基于 sleep /产量的调度。

关于c++ - 使用 SCHED_RR 调度策略运行的线程的 sched_yield() 的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32300741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com