fonction nice(int prio) et pthread_setschedprio(pthread_t thread, int prio) en C
Bonjour,
Dans mon cas je n'utilise qu'un seul thread processeur via la commande linux : taskset -pc 0 $$
j'essaye avec la fonction nice(int prio) et pthread_setschedprio(pthread_t thread, int prio) d'augmenter et diminuer le temps de certain de mes threads. J'utilise la commande nice sur linux : sudo nice -n -15 ./prog2& ./prog2 et cette commande permet à mon processus prog1 d'avoir plus de temps de processeur que ./prog2. A ce que j'ai compris la commande nice est dans le mode temps partagé et non temps réel, donc je n'ai pas à gérer la politique d'ordonnancement car par défaut c'est sched_Other (qui est le temps partagé). j'ai donc fait :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
void* f1(){/*donne le nombre d itération faite en 10 secondes*/}
int main(){
pthread_t t1;
for (int i = 0; i < 5; ++i)
{
pthread_create(&t1, NULL, f1, NULL);
pthread_setschedprio(t1, -20 + 4*i); //prio va de -20 à 19
}
} |
Ce code ne fonctionne pas car la fonction pthread_setschedprio me retourne autre chose que 0. Le probleme est que la fonction marche uniquement si prio = 0 ce qui est logique car sched_other n'a aucune priorité. Or si prio est tout le temps égale à 0 alors je ne gere pas la priorité. D'ou mon premier problème.
Ensuite j'ai essaye également avec la fonction en C nice :
Code:
1 2 3 4 5 6
| for (int i = 0; i < 10; ++i)
{
nice(-20 +4*i) // on modifie le temps que chaque thread utilisera sur le thread processeur
pthread_create(&t1, NULL, f1, NULL);
pthread_setschedprio(t1, -20 + 4*i); //prio va de -20 à 19
} |
j'ai des threads qui font parfois 10 fois plus d'itération que d'autre donc ca à l'air de marcher mais est ce que la fonction nice se met bien la ou je l'ai placé ?
Merci d'avance pour vos réponses.