Sous-routine pthread_setschedprio
Objectif
Accès aux paramètres de planification d'unité d'exécution dynamique (REALTIME THREADS).
Syntaxe
#include <pthread.h>
int pthread_setschedprio(pthread_t thread, int prio); Descriptif
La fonction pthread_setschedprio() définit la priorité de planification de l'unité d'exécution dont l'ID est donné par thread sur la valeur donnée par prio. Si une unité d'exécution dont la règle ou la priorité a été modifiée par pthread_setschedprio() est une unité d'exécution en cours d'exécution ou est exécutable, l'effet sur sa position dans la liste des unités d'exécution dépend de la direction de la modification, comme suit:
- Si la priorité est levée, l'unité d'exécution devient la fin de la liste des unités d'exécution.
- Si la priorité est inchangée, l'unité d'exécution ne change pas de position dans la liste des unités d'exécution.
- Si la priorité est réduite, l'unité d'exécution devient la tête de la liste des unités d'exécution.
Les priorités valides sont comprises dans la plage renvoyée par sched_get_priority_max() et sched_get_priority_min().
Si la fonction pthread_setschedprio() échoue, la priorité de planification de l'unité d'exécution cible reste inchangée.
Fondement
La fonction pthread_setschedprio() permet à une application d'augmenter temporairement sa priorité, puis de la réduire à nouveau, sans avoir l'effet secondaire indésirable de céder à d'autres unités d'exécution de même priorité. Cela est nécessaire si l'application doit mettre en œuvre ses propres stratégies de délimitation de l'inversion de priorité, telles que l'héritage de priorité ou les plafonds de priorité. Cette fonction est particulièrement importante si l'implémentation ne prend pas en charge les options Thread Priority Protection ou Thread Priority Inheritance ; mais même si ces options sont prises en charge, cette fonction est nécessaire si l'application doit lier l'héritage de priorité pour d'autres ressources, telles que les sémaphores.
Les développeurs standard ont considéré que, bien qu'il puisse être préférable d'un point de vue conceptuel de résoudre ce problème en modifiant la spécification de pthread_setschedparam(), il était trop tard pour effectuer une telle modification car il pourrait y avoir des implémentations qui auraient besoin d'être modifiées. Par conséquent, cette nouvelle fonction a été introduite.
Valeurs renvoyées
En cas de réussite, la fonction pthread_setschedprio() renvoie 0 ; sinon, un numéro d'erreur est renvoyé pour indiquer l'erreur.
Codes d'erreur
La fonction pthread_setschedprio() peut échouer si:
| Article | Descriptif |
|---|---|
| EINVAL | La valeur de prio n'est pas valide pour la règle de planification de l'unité d'exécution spécifiée. |
| ENOTSUP | Une tentative a été effectuée pour définir la priorité sur une valeur non prise en charge. |
| EPERM | L'appelant ne dispose pas des droits appropriés pour définir la règle de planification de l'unité d'exécution spécifiée. |
| EPERM | L'implémentation ne permet pas à l'application de modifier la priorité en fonction de la valeur spécifiée. |
| ESRCH | La valeur spécifiée par thread ne fait pas référence à une unité d'exécution existante. |
La fonction pthread_setschedprio ne renvoie pas le code d'erreur [ EINTR ].