gpt4 book ai didi

Linux 调度程序 FIFO 未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:14 24 4
gpt4 key购买 nike

我想以这种方式使用调度程序:

示例

  • 3 个具有不同优先级的 pthread(0、50、99)

如果99的pthread正在运行,则不允许其他pthread运行。执行顺序应以优先级为导向

我的实现:

每个 pthread 都是按照该序列创建的

struct sched_param schedparam;  // thread scheduler parameter

pthread_create(threadPtr,NULL,(void *)entryPt,NULL);

pthread_attr_setschedpolicy(attrPtr, SCHED_FIFO);

schedparam.__sched_priority=priority;

pthread_attr_setschedparam(attrPtr, &schedparam );

pthread_setschedparam(threadId,SCHED_FIFO,&schedparam );

但是这不起作用。

行为:

pthread 的执行顺序与创建顺序相同。

最佳答案

“pthreads 按照创建的顺序执行”:如果您有三个或更多空闲核心,那么这是预期的行为 - 所有线程都有不同的优先级,但有足够的资源来运行它们,因此它们都会运行。

即使只有一个核心,许多操作系统调度程序都有反饥饿算法,可以逐渐提高低优先级线程的动态优先级,以便它们最终能够运行(一点点)。如果低优先级线程已获得锁,然后被抢占,然后无法继续,从而导致其他地方出现问题(优先级反转),则此方案可以帮助解决过载的情况。

如果您想要发布这样的“奇怪”行为,则必须使用适当的线程间通信对其进行实际编码,以防止其他线程在重要线程运行时运行。

编辑:

“pthreads 的执行顺序与它们创建时的顺序相同” - 你怎么知道这一点?线程有什么作用?它们会永远运行吗?

关于Linux 调度程序 FIFO 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13046172/

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