我在Linux下有一个进程,它由两个线程组成,一个是生产者,一个是使用者。为了简单起见,假设这是系统中运行在单核单CPU体系结构上的唯一进程。
首先创建生产者,并使用sched_setscheduler(0, SCHED_RR, ¶ms)手动分配一个sched_setscheduler(0, SCHED_RR, ¶ms)调度策略。过了一段时间,消费线程也被创建了。由于它是在为生产者调用sched_setscheduler之后创建的,因此它没有相同的SCHED_RR调度策略集。
在这种情况下,我试图从生产者(一旦产生一个元素)了解sched_yield()的影响。
有两种可能性,但我不确定哪一种是真的:
SCHED_RR调度策略和一起运行,生产者没有完成分配的量程时间或没有sleep。在这种情况下,yield()可能会产生负面影响,因为这是没有意义的。发布于 2015-08-30 23:01:02
虽然我不确定在实践中会发生什么,但形式上sched_yield不允许在这种情况下运行较低优先级的线程;它只是为了屈服于相同优先级的线程。
您应该使用条件变量或其他适当的同步机制来确保您的使用者能够运行(生产者应该在谓词上pthread_cond_wait,即队列超过了某个完全阈值或类似值),而不是试图进行基于睡眠/产量的调度。
https://stackoverflow.com/questions/32300741
复制相似问题