txt*_*elp 5 c++ linux cross-platform pthreads
我正在尝试为我正在研究的项目编写一个半可移植的线程类,在尝试设置线程的优先级时,我在pthread世界中遇到了一个难题.
给出以下代码:
#include <stdio.h>
#include <unistd.h>
#include <sched.h>
main()
{
printf("Valid priority range for SCHED_OTHER: %d - %d\n",
sched_get_priority_min(SCHED_OTHER),
sched_get_priority_max(SCHED_OTHER));
printf("Valid priority range for SCHED_FIFO: %d - %d\n",
sched_get_priority_min(SCHED_FIFO),
sched_get_priority_max(SCHED_FIFO));
printf("Valid priority range for SCHED_RR: %d - %d\n",
sched_get_priority_min(SCHED_RR),
sched_get_priority_max(SCHED_RR));
}
Run Code Online (Sandbox Code Playgroud)
在OpenBSD中,这将打印以下内容:
Valid priority range for SCHED_OTHER: 0 - 31
Valid priority range for SCHED_FIFO: 0 - 31
Valid priority range for SCHED_RR: 0 - 31
Run Code Online (Sandbox Code Playgroud)
在Ubuntu中它产生了这个:
Valid priority range for SCHED_OTHER: 0 - 0
Valid priority range for SCHED_FIFO: 1 - 99
Valid priority range for SCHED_RR: 1 - 99
Run Code Online (Sandbox Code Playgroud)
我的问题更多是关于SCHED_OTHER优先事项.根据我能够集合的所有文档(sched.h,google,SO,SE),我的理解是应该尝试检索当前进程的进程优先级并根据该优先级分配优先级.这很好,除非检索最小/最大值SCHED_OTHER.由于调度是依赖于系统的,如果我获得当前进程的优先级SCHED_OTHER并尝试在Ubuntu(或我遇到的其他Linux系统)上获取最小/最大值,我的值将是0-0,赢得了尝试设置有效的优先级范围.但是,我确实SCHED_OTHER在其他类似unix的系统(OpenBSD等)上获得了有效值.
由于我的主要关注点是只尝试获得有效的优先级值范围(以确保用户输入的值不是太高或太低),我是否应该不关心当前进程的优先级并且只获取最小值/最大值为值SCHED_FF或SCHED_RR因为这些价值观似乎给我的有效范围为我所遇到的各种Linux/Unix系统,还是我完全错过了点?
在此先感谢,如果我不清楚或错误的话,请告诉我.
编辑1:请注意我的主要关注点是以"便携式"方式获得有效范围而不是流程优先级本身......谢谢!