gpt4 book ai didi

c - Linux 线程调度

转载 作者:行者123 更新时间:2023-11-30 16:42:19 26 4
gpt4 key购买 nike

我在嵌入式 Linux 系统上有一个进程正在运行多个线程(pthreads)。所有线程的类型均为 SCHED_FIFO。

为了简单起见 - 假设线程 T60 的优先级为 60,T40 的优先级为 40,T10 的优先级为 10。每个线程中都有一个 printf,这样我就可以看到谁在运行以及何时运行。

T60伪代码:

while(1)
{
sendmsg();
printf("T60 pending");
fflush(stdout);
pend_for_reply();
printf("T60 got reply");
fflush(stdout);
process reply();
}

T40伪代码:

...
for(i=0;i<100;i++)
{
printf("T40 executing for loop\n");
fflush(stdout);
NoStallFoo();
}

T10伪代码:

while(1)
{
wdog_pet();
printf("T10 Running\n");
fflush(stdout);
sleep(2);
}

我预计,由于优先级的原因,我永远不会在 100 个 T40 的 block 中看到 T10 输出。然而我看到的看起来更像是:T60待定T40执行for循环
T40执行for循环
T40执行for循环
T40执行for循环
T40执行for循环
T40执行for循环
...
T40执行for循环
T10运行
T60收到回复
T60待定
T40执行for循环
T40执行for循环
T40执行for循环
T40执行for循环
T40执行for循环
....等等等等。

显然 T40 有工作要做,但不知何故优先级较低的 T10 能够运行。有人可以解释一下吗?

最佳答案

在调度算法中,

在准备运行的进程列表的每个周期中,

进程优先级在列表的每个循环中递减,

直到进程实际运行,

然后其优先级重置回原来的优先级

关于c - Linux 线程调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45868777/

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