pthread sched_get_priority_min / max implementación para SCHED_OTHER / SCHED_FIFO

Estoy tratando de escribir una clase de subprocesos semi-portátil para un proyecto en el que estoy trabajando, y al intentar establecer la prioridad de un hilo, me encontré con un enigma en el mundo pthread.

Dado el siguiente código:

#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));
}

En OpenBSD esto imprimiría lo siguiente:

Valid priority range for SCHED_OTHER: 0 - 31
Valid priority range for SCHED_FIFO: 0 - 31
Valid priority range for SCHED_RR: 0 - 31

En Ubuntu produce esto:

Valid priority range for SCHED_OTHER: 0 - 0
Valid priority range for SCHED_FIFO: 1 - 99
Valid priority range for SCHED_RR: 1 - 99

Mi pregunta es más en lo que respecta a laSCHED_OTHER prioridad. Según toda la documentación que he podido reunir (sched.h, google, SO, SE), entiendo que se debe intentar recuperar la prioridad de proceso del proceso actual y asignar prioridad en función de eso. Esto está bien, excepto cuando se recuperan los valores mínimo / máximo paraSCHED_OTHER. Dado que la programación depende del sistema, si obtengo la prioridad del proceso actual comoSCHED_OTHER y tratar de obtener los valores mínimos / máximos en un Ubuntu (u otros sistemas Linux que he encontrado), mis valores serían 0-0, lo que no funcionará para tratar de establecer un rango de prioridad válido. Sin embargo, tengo valores válidos paraSCHED_OTHER en otros sistemas similares a Unix (OpenBSD, etc.)

Dado que mi principal preocupación es solo tratar de obtener un rango válido de valores de prioridades (para garantizar que el usuario no ingrese un valor demasiado alto o bajo), no debería siquiera molestarme con la prioridad del proceso actual y solo obtener el mínimo / máximo valores paraSCHED_FF oSCHED_RR ¿Parece que esos valores me dan rangos válidos para los diversos sistemas linux / unix que he encontrado, o me estoy perdiendo el punto por completo?

Gracias de antemano y, por favor, avíseme si no estoy seguro o no estoy expresando correctamente algo.

EDITAR 1: tenga en cuenta que mi principal preocupación es con una forma 'portátil' de obtener rangos válidos más que la prioridad del proceso en sí ... ¡gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta