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:

Tableau 1. Codes d'erreur
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 ].