pthread_setschedprio (Subroutine)

Zweck

Zugriff auf Parameter für dynamische Threadterminierung (REALTIME THREADS).

Syntax

#include <pthread.h>

int pthread_setschedprio(pthread_t thread, int prio); 

Beschreibung

Die Funktion pthread_setschedprio() setzt die Scheduling-Priorität für den Thread, dessen Thread-ID durch thread angegeben wird, auf den durch prio angegebenen Wert. Wenn ein Thread, dessen Policy oder Priorität durch pthread_setschedprio() geändert wurde, ein laufender Thread ist oder lauffähig ist, hängt die Auswirkung auf seine Position in der Tread-Liste von der Richtung der Änderung wie folgt ab:

  • Wenn die Priorität erhöht wird, wird der Thread zum Ende der Threadliste.
  • Wenn die Priorität unverändert ist, ändert der Thread die Position in der Threadliste nicht.
  • Wird die Priorität herabgesetzt, wird der Thread an die Spitze der Thread-Liste gesetzt.

Gültige Prioritäten liegen innerhalb des von sched_get_priority_max() und sched_get_priority_min() zurückgegebenen Bereichs.

Wenn die Funktion pthread_setschedprio() fehlschlägt, bleibt die Planungspriorität des Zielthreads unverändert.

Begründung

Die Funktion pthread_setschedprio() bietet einer Anwendung die Möglichkeit, ihre Priorität vorübergehend anzuheben und dann wieder abzusenken, ohne dass der unerwünschte Nebeneffekt eintritt, dass sie anderen Threads mit der gleichen Priorität nachgibt. Dies ist erforderlich, wenn die Anwendung ihre eigenen Strategien zur Begrenzung der Umkehrung der Priorität implementieren soll, wie z. B. Prioritätsvererbung oder Prioritätsobergrenzen. Diese Fähigkeit ist besonders wichtig, wenn die Implementierung die Optionen "Thread-Prioritätsschutz" oder "Thread-Prioritätsvererbung" nicht unterstützt. Aber auch wenn diese Optionen unterstützt werden, ist diese Fähigkeit erforderlich, wenn die Anwendung die Prioritätsvererbung für andere Ressourcen, wie z. B. Semaphoren, einbinden soll.

Die Standardentwickler waren der Ansicht, dass es zwar konzeptionell besser wäre, dieses Problem durch eine Änderung der Spezifikation von pthread_setschedparam() zu lösen, dass es aber zu spät für eine solche Änderung sei, weil es möglicherweise Implementierungen gäbe, die geändert werden müssten. Daher wurde diese neue Funktion eingeführt.

Rückgabewerte

Bei Erfolg gibt die Funktion pthread_setschedprio() den Wert 0 zurück; andernfalls wird eine Fehlernummer zurückgegeben, um den Fehler anzuzeigen.

Fehlercodes

Die Funktion pthread_setschedprio() könnte fehlschlagen, wenn:

Element Beschreibung
EINVAL Der Wert prio ist für die Planungsrichtlinie des angegebenen Threads ungültig.
ENOTSUP Es wurde versucht, die Priorität auf einen nicht unterstützten Wert festzulegen.
EPERM Der Aufrufende verfügt nicht über die entsprechende Berechtigung zum Festlegen der Planungsrichtlinie des angegebenen Threads.
EPERM Die Implementierung lässt nicht zu, dass die Anwendung die Priorität in den angegebenen Wert ändert.
ESRCH Der durch thread angegebene Wert bezieht sich nicht auf einen bestehenden Thread.

Die Funktion pthread_setschedprio liefert nicht den Fehlercode [EINTR].