pthread sched_get_priority_min/max-Implementierung für SCHED_OTHER/SCHED_FIFO

Bin ich zu schreiben versucht, eine semi-portable-threading-Klasse für ein Projekt an dem ich arbeite, und beim festlegen der Priorität eines Threads, stieß ich auf ein Problem in der pthread-Welt.

Folgenden code:

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

In OpenBSD drucken würde die folgenden:

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

In Ubuntu es produziert dies:

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

Meine Frage ist mehr in Bezug auf die SCHED_OTHER Priorität. Nach allen Unterlagen, die ich habe in der Lage, aufbringen (sched.h, google, SO, SE), mein Verständnis ist, dass man versuchen sollte, und rufen Sie die Prozess-Priorität des aktuellen Prozesses und Priorität, basierend auf, dass. Das ist in Ordnung, außer beim abrufen der min/max-Werte für SCHED_OTHER. Seit scheduling-system abhängig, wenn ich die Priorität des aktuellen Prozesses als SCHED_OTHER und versuchen, um die min - /max-Werte auf einem Ubuntu (oder andere linux Systeme, die ich begegnet bin), meine Werte wären 0-0, die nicht für die Arbeit, die versuchen, eine gültige Priorität Bereich. Allerdings bekomme ich gültige Werte für SCHED_OTHER auf andere unix-ähnliche Betriebssysteme (OpenBSD, etc).

Da meine größte Sorge ist nur versuchen, um eine gültige Prioritäten der Werte (um sicherzugehen, dass der Benutzer nicht ein zu hoher oder niedriger Wert), sollte ich es erst gar nicht mit dem aktuellen Prozess Priorität und nur die min/max-Werte für SCHED_FF oder SCHED_RR da diese Werte scheinen mir gültige Bereiche für die verschiedenen linux/unix-Systeme, die ich angetroffen habe, oder bin ich fehlt der Punkt komplett?

Vielen Dank im Voraus und bitte lassen Sie mich wissen, wenn ich mich unklar oder misstating etwas.

EDIT 1: bitte beachten Sie, dass meine größte Sorge ist, mit einem "tragbaren" Weg, um gültige reicht mehr als der Prozess Priorität selbst..danke!

InformationsquelleAutor txtechhelp | 2012-05-18
Schreibe einen Kommentar