pthread_setscheduler(3-thr) pthread_setscheduler(3-thr)
NAME
pthreadsetscheduler - Aktuelle Scheduling-Strategie und Priorität
eines Thread ändern
SYNTAX
#include <pthread.h>
int pthreadsetscheduler(
pthreadt thread,
int scheduler,
int priority);
PARAMETER
thread Thread, dessen Scheduling-Strategie geändert werden soll.
scheduler Neuer Wert für die Scheduling-Strategie des in thread
angegebenen Thread. Gültige Werte sind:
SCHEDFIFO
(First In, First Out) Der Thread mit der höchsten
Priorität wird so lange ausgeführt, bis er blockiert
wird. Wenn mehrere Threads mit gleicher Priorität
vorliegen, und es sich hierbei um die höchste Priori-
tät unter den einzelnen Threads handelt, läuft der
zuerst ausgeführte Thread so lange weiter, bis er
blockiert wird..
SCHEDRR
(Round Robin - zyklische Weiterschaltung) Der Thread
mit der höchsten Priorität wird so lange ausgeführt,
bis er blockiert wird; Threads mit gleicher Priori-
tät, falls es sich hierbei um die höchste Priorität
unter den einzelnen Threads handelt, werden aller-
dings Zeitscheiben zugeteilt. Dies ist ein Prozeß,
bei dem den Threads die verfügbaren Prozessoren
abwechselnd zur Verfügung gestellt werden.
SCHEDOTHER
(Standard) Die Zeitscheiben sind über alle Threads
verteilt. Mit SCHEDOTHER wird sichergestellt, daß
allen Threads, unabhängig von der Priorität, Zeit-
scheiben zugeteilt werden, so daß kein Thread gänz-
lich von der Ausführung ausgeschlossen ist. (Aller-
dings kann die Ausführung von SCHEDOTHER-Threads
durch SCHEDFIFO- oder SCHEDRR-Threads verhindert
werden.)
SCHEDFGNP
(Foreground - Vordergrund) Wie SCHEDOTHER. Den
Threads sind Zeitscheiben zugeteilt und Prioritäten
können dynamisch durch den Scheduler geändert werden,
um Ausgeglichenheit (Fairness) zu gewährleisten.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
pthread_setscheduler(3-thr) pthread_setscheduler(3-thr)
SCHEDBGNP
(Background - Hintergrund) Hiermit wird sicherge-
stellt, daß auf alle Threads unabhängig von der Prio-
rität Zeitscheiben verteilt werden. Allerdings kann
die Ausführung von SCHEDBGNP-Threads durch eine der
anderen Strategien verhindert werden.
priority Neuer Prioritätswert des in thread angegebenen Thread. Das
Prioritätsattribut hängt von der Scheduling-Strategie ab.
Gültige Werte liegen innerhalb der folgenden Bereiche:
PRIOTHERMIN <= priority <= PRIOTHERMAX
PRIFIFOMIN <= priority <= PRIFIFOMAX
PRIRRMIN <= priority <= PRIRRMAX
PRIFGMINNP <= priority <= PRIFGMAXNP
PRIBGMINNP <= priority <= PRIBGMAXNP
Wenn Sie einen neuen Thread erstellen, ohne ein Objekt für die
Thread-Attribute mit einem geänderten Prioritätsattribut anzugeben,
liegt die Standardpriorität für den neu erstellten Thread in der Mitte
zwischen PRIOTHERMIN und PRIOTHERMAX (die Mitte zwischen Minimum
und Maximum für die Strategie SCHEDOTHER).
Wenn Sie diese Routine zur Angabe einer Mindestpriorität oder einer
maximalen Priorität aufrufen, verwenden Sie hierzu das entsprechende
Symbol; zum Beispiel PRIFIFOMIN oder PRIFIFOMAX. Verwenden Sie zur
Angabe eines Werts zwischen Minimum und Maximum einen entsprechenden
arithmetischen Ausdruck. Wenn Sie beispielsweise eine Priorität in der
Mitte zwischen Minimum und Maximum für die Scheduling-Strategie für
zyklische Weiterschaltung (Round Robin) angeben wollen, geben Sie in
der Syntax Ihrer Programmiersprache folgendes Konzept an:
prirrmid = (PRIRRMIN + PRIRRMAX)/2
Ergibt sich aus dem Ausdruck ein Wert, der außerhalb des Bereichs zwi-
schen Minimum und Maximum liegt, führt dies bei Verwendung des Aus-
drucks zu einem Fehler.
BESCHREIBUNG
Die Routine pthreadsetscheduler() ändert die aktuelle Scheduling-
Strategie und Priorität eines Thread. Rufen Sie diese Routine auf,
wenn Sie die Priorität zusammen mit der Scheduling-Strategie eines
Thread ändern wollen. Soll nur die Priorität geändert werden, verwen-
den Sie die Routine pthreadsetprio().
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
pthread_setscheduler(3-thr) pthread_setscheduler(3-thr)
Ein Thread ändert seine eigene Scheduling-Strategie und Priorität über
die durch pthreadself() zurückgegebene ID. Die Änderung der
Scheduling-Strategie und/oder Priorität eines Thread kann zur Folge
haben, daß dieser ausgeführt oder durch einen anderen Thread abgelöst
wird.
Diese Routine unterscheidet sich von den Routinen
pthreadattrsetprio() und pthreadattrsetsched(), die die Attribute
für Priorität und Scheduling-Strategie setzen, über die die Priorität
und Scheduling-Strategie eines neuen Thread während seiner Erstellung
eingerichtet werden. Die vorliegende Routine dagegen ändert die Prio-
rität und Scheduling-Strategie eines vorhandenen Thread.
RÜCKGABEWERTE
Bei erfolgreicher Ausführung gibt diese Routine den Wert der vorher-
igen Scheduling-Strategie zurück. Wenn die Funktion fehlschlägt, kann
errno auf einen der folgenden Werte gesetzt werden:
EINVAL Der durch thread angegebene Wert ist ungültig.
ENOTSUP Es wird versucht, die Strategie auf einen nicht unterstütz-
ten Wert zu setzen.
ESRCH Der durch thread angegebene Wert verweist nicht auf einen
vorhandenen Thread.
EPERM Der Aufrufer verfügt nicht über die Berechtigungen, die zum
Setzen der Scheduling-Strategie für den angegebenen Thread
erforderlich sind.
SIEHE AUCH
pthreadattrsetprio(3-thr), pthreadattrsetsched(3-thr),
pthreadcreate(3-thr), pthreadself(3-thr), pthreadsetprio(3-thr).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98