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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 } }
Ensuite j'ai essaye également avec la fonction en C nice :
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é ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 }
Merci d'avance pour vos réponses.
Partager