Sous-routine pthread_setschedparam

Objectif

Définit les attributs schedpolicy et schedparam d'une unité d'exécution.

Bibliothèque

Bibliothèque d'unités d'exécution (libpthreads.a)

Syntaxe

#include <pthread.h>
#include <sys/sched.h>

int pthread_setschedparam (thread, schedpolicy, schedparam)
pthread_t thread;
int schedpolicy;
const struct sched_param *schedparam;

Descriptif

La sous-routine pthread_setschedparam définit dynamiquement les attributs schedpolicy et schedparam de l'unité d'exécution thread. L'attribut schedpolicy spécifie la règle de planification de l'unité d'exécution. L'attribut schedparam spécifie les paramètres de planification d'une unité d'exécution créée avec cet objet d'attribut. La zone sched_priority de la structure sched_param contient la priorité de l'unité d'exécution. Il s'agit d'une valeur entière.

Si l'unité d'exécution cible a une portée de conflit système, le processus doit disposer des droits d'accès root pour définir la règle de planification sur SCHED_FIFO ou SCHED_RR.

Remarque: Le fichier d'en-tête pthread.h doit être le premier fichier inclus de chaque fichier source qui utilise la bibliothèque d'unités d'exécution. Sinon, l'indicateur de compilation -D_THREAD_SAFE doit être utilisé ou le compilateur cc_r doit être utilisé. Dans ce cas, l'indicateur est automatiquement défini.

Cette sous-routine fait partie de l'environnement d'exécution du système d'exploitation de base (BOS). L'implémentation de cette sous-routine dépend de l'option POSIX de planification des priorités. L'option POSIX de planification des priorités est implémentée dans le système d'exploitation.

Paramètres

Tableau 1. Paramètres
Article Descriptif
unité d"exécution Indique l'unité d'exécution cible.
politique d'ordonnancement Pointe vers l'attribut schedpolicy à définir. Elle doit avoir l'une des valeurs suivantes:
SCHED_FIFO
Indique la planification de la première entrée et de la première sortie.
SCHED_RR
Indique la planification de la permutation circulaire.
SCHED_OTHER
Indique la règle de planification du système d'exploitation par défaut. Il s'agit de la valeur par défaut. Si schedpolicy est SCHED_OTHER, sched_priority doit être compris entre 40 et 80, où 40 est la priorité la moins favorisée et 80 la plus favorisée.
Remarque: la priorité des unités d'exécution avec une portée de conflit de processus et une règle SCHED_OTHER est contrôlée par le noyau ; par conséquent, la définition de la priorité d'une telle unité d'exécution n'a aucun effet. Toutefois, la priorité des unités d'exécution avec une portée de conflit système et une règle SCHED_OTHER peut être modifiée. La modification affecte directement la valeur nice de l'unité d'exécution du noyau sous-jacente.
schedparam Indique où sont stockés les paramètres de planification à définir. La zone sched_priority doit être comprise entre 1 et 127, où 1 est la priorité la moins favorisée et 127 la plus favorisée. Si schedpolicy est SCHED_OTHER, sched_priority doit être compris entre 40 et 80, où 40 est la priorité la moins favorisée et 80 la plus favorisée.

Les utilisateurs peuvent modifier la priorité d'une unité d'exécution lors de la définition de sa stratégie de planification sur SCHED_OTHER. Les valeurs admises qui peuvent être transmises à pthread_setschedparam sont comprises entre 40 et 80. Seuls les utilisateurs privilégiés peuvent définir une priorité supérieure à 60. Une valeur comprise entre 1 et 39 donne la même priorité que 40, et une valeur comprise entre 81 et 127 donne la même priorité que 80.

Valeurs renvoyées

Une fois l'opération terminée, la valeur 0 est renvoyée. Sinon, un code d'erreur est renvoyé.

Codes d'erreur

La sous-routine pthread_setschedparam échoue si la condition suivante est vraie:

Tableau 2. Codes d'erreur
Article Descriptif
EINVAL Les paramètres thread ou schedparam ne sont pas valides.
ENOSYS L'option POSIX de planification des priorités n'est pas implémentée.
ENOTSUP La valeur des attributs schedpolicy ou schedparam n'est pas prise en charge.
EPERM L'unité d'exécution cible ne dispose pas des droits suffisants pour effectuer l'opération ou est déjà engagée dans un protocole mutex.
ESRCH L'unité d'exécution thread n'existe pas.