I’m trying to reimplement in a backward-compatible way the RobotC API from C (although some details would better fit or would be easier with C++), and trying to reimplement their multithreading API in some portable way, so I try to use
sched_get_priority_min(2). But on one hand
sched(7) say priority is between -20 (highest priority) and 19 (lower priority), on another hand, the former man pages stated that:
[…] numerically higher priority values are scheduled before processes with numerically lower priority values. Thus, the value returned by sched_get_priority_max() will be greater than the value returned by sched_get_priority_min()
which would mean the opposite: positive value being of higher priority and negative of lower priority (it also gives the example of real-time policies where priority is between 1 and 99).
What is going to be returned by
_min? what should I use with
I have three values defining my custom priority range: the low priority (
kLowPriority, set to 0), the high one (
kHighPriority, set to 255) and the default one (
kDefaultPriority, set to 7). Ideally I suppose the default being 0 for the scheduling policies having a default,
kDefaultPriority/7 should become 0,
kHighPriority/255 the highest priority (19? 99? whatever
sched_get_priority_max(3) returns) or maybe the highest priority that can be assigned if unpriviledged? and then
0 ± kDefaultPriority, either the lowest priority …what would be the more reasonable?
Currently I think I do it this way:
pthread_attr_t attr; pthread_t thread; struct sched_param param; const int policy = sched_getscheduler(0), sched_high_prio = sched_get_priority_max(policy), // 19, sched_low_prio = sched_get_priority_min(policy), // -20, sched_range_prio = sched_high_prio - sched_low_prio; pthread_attr_init (&attr); pthread_attr_getinheritsched(&attr, PTHREAD_INHERIT_SCHED); pthread_attr_getschedparam (&attr, ¶m); param.sched_priority = -(((nTaskPriority - kLowPriority) * sched_range_prio / kHighPriority) + sched_low_prio - kDefaultTaskPriority);
PS: I’m not sure if the best place to ask this question about POSIX API is here or stackoverflow, so I’m doing both, please delete my post or ask me to delete if you think it’s at the wrong place. EDIT: SO post deleted.