我正在尝试为我正在研究的项目编写一个半可移植的线程类,在尝试设置线程的优先级时,我在pthread世界中遇到了一个难题.
给出以下代码:
#include dio.h>
#include
在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
在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
我的问题更多是关于SCHED_OTHER优先级.根据我能够集合的所有文档(sched.h,google,SO,SE),我的理解是应该尝试检索当前进程的进程优先级并根据该优先级分配优先级.这很好,除非检索SCHED_OTHER的最小/最大值.由于调度是依赖于系统的,如果我将当前进程的优先级作为SCHED_OTHER并尝试在Ubuntu(或我遇到的其他Linux系统)上获取最小/最大值,我的值将是0-0,其中无法尝试设置有效的优先级范围.但是,我确实在其他类似unix的系统(OpenBSD等)上获得了SCHED_OTHER的有效值.
由于我的主要关注点是只尝试获得有效的优先级值范围(以确保用户输入的值不是太高或太低),我是否应该不关心当前进程的优先级并且只获取最小值/最大值SCHED_FF或SCHED_RR的值,因为这些值似乎给出了我遇到的各种linux / unix系统的有效范围,或者我完全忽略了这一点?
在此先感谢,如果我不清楚或错误的话,请告诉我.
编辑1:请注意我的主要关注点是以“便携式”方式获得有效范围而不是流程优先级本身……谢谢!
最佳答案