c – pthread SCHED_OTHER / SCHED_FIFO的sched_get_priority_min / max实现

前端之家收集整理的这篇文章主要介绍了c – pthread SCHED_OTHER / SCHED_FIFO的sched_get_priority_min / max实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试为我正在研究的项目编写一个半可移植的线程类,在尝试设置线程的优先级时,我在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:请注意我的主要关注点是以“便携式”方式获得有效范围而不是流程优先级本身……谢谢!

最佳答案
您在SCHED_OTHER的Ubuntu(以及任何其他基于Linux的操作系统)中获得的优先级范围是[0,0],这是一个有效范围.
这意味着所有这些非实时进程都具有相同的“优先级”,它们唯一的区别在于它们的“好”值.

有关详细信息,请参阅nice系统调用.
我不确定OpenBSD的调度程序是如何工作的,但是nice()系统调用是在POSIX中,它应该在UNIX系统中受支持.

猜你在找的Linux相关文章