环境 - 具有 linux 内核 2.6.18 的嵌入式设备要求 - 3 个线程(从一个进程创建,假设 P1 创建了 T1、T2、T3)
T1 处于 linux 优先级 99(最高),T2 处于 linux 优先级 50(中),T3 处于 linux 优先级 2(最低)。没有为任何线程显式设置好的值。
T1 和 T3 都每秒增加一个变量一次。T1 每 5 秒打印一次这两个变量。这很顺利。【问题的地方】当T2进入死循环“for(;;);”后,T1的计数正常增加,但T3的计数一点也不增加。这意味着 T3 从来没有时间在 CPU 中运行。
一直以来,我一直在想 linux 的 CFS 保证所有优先级都会得到适当的份额(基于权重)。但这证明了任何线程在不休眠的情况下占用 CPU,停止所有其他低优先级线程的运行。
如果有人知道为什么 CFS 调度程序会以这种方式运行,请回答,如果有办法纠正这个问题?