IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

fonction nice(int prio) et pthread_setschedprio(pthread_t thread, int prio) en C


Sujet :

Linux

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut 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 : 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	
    }
     
    }
    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 : 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	
    }
    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.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    Bonjour,

    Déjà, il faudrait que tu test le retour de ta fonction pour savoir quel est le type d'erreur.

    SCHED_OTHER possède une priorité et tu peux gérer ton nice de 0 à +19 sauf si ton processus dispose de privilèges (dans ce cas de -20 à +19).
    Je suis presque prêt à parier que ta fonction ne fonctionne pas car ton processus ne dispose pas de privilèges suffisants.

    Quant à nice(), ça m'etonnerait qu'il te mette un nice négatif pour tes threads.

    Fais une boucle et vérifie le nice de tes threads en cours d'execution.

Discussions similaires

  1. pthread_t vs int
    Par sayfouche dans le forum POSIX
    Réponses: 2
    Dernier message: 09/02/2010, 01h21
  2. fonction avec 2 parametres qui me renvoie un int
    Par siro1 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/12/2009, 14h56
  3. Fonction de recherche de fichier en multi thread
    Par Takumi dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 22/11/2009, 23h10
  4. Quitter une fonction qui fait une boucle dans le Thread ?
    Par bboy0303 dans le forum Multithreading
    Réponses: 2
    Dernier message: 25/05/2009, 17h58
  5. passer un int en argument d'un thread
    Par romainromain dans le forum POSIX
    Réponses: 3
    Dernier message: 08/12/2006, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo