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

C++ Discussion :

[MT] Threads : problème tps traitement tache


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Par défaut [MT] Threads : problème tps traitement tache
    Bonjour,

    Je suis sous ubuntu feisty et j'utilise gcc et les pthreads.
    Voici mon problème j'ai un programme ou je lance 2 threads, chaque thread exécute une série de taches assez lourde et le temps d'exécution entre ces 2 threads se fait assez mal: soit l'un occupe toute les ressources pdt longtemps et l'autre attend ou vice verca.
    J'aimerais que mon programme bascule rapidement d'un thread à l'autre afin de réaliser un réel pseudo traitement du code en temps réel.
    Voici le canevas que j'ai utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    pthread_mutex_t mutex_cycab = PTHREAD_MUTEX_INITIALIZER;
     
    static void *gestion_cycab1 (void *p_data)
    {
        bool loopcycab1 = true;
        do
        {
            pthread_mutex_lock(&mutex_cycab);
            bayoccfil.Bof_display_cycab1(false);
            if (rrt.Predict_Path('1', step) == false) loopcycab1 = false;
            rrt.Move_Cycab ('1', step);
            hugrcommunication.get_Cycab_PosY('1'),2);
            pthread_mutex_unlock(&mutex_cycab);
            bayoccfil.raz_vec_occ_grid_point();
        }
        while (loopcycab1 == true);
        return NULL;
    }
     
    static void *gestion_cycab2 (void *p_data)
    {
        bool loopcycab2 = true;
        do
        {
            pthread_mutex_lock(&mutex_cycab);
            cout<<"traitement thread 2"<<endl;
            pthread_mutex_unlock(&mutex_cycab);
        }
        while (loopcycab2 == true);
        return NULL;
    }
     
    int main()
    {
        bayoccfil.initialisation();
        pthread_t thread_cycab1;
        pthread_t thread_cycab2;
     
        pthread_create (&thread_cycab1, NULL, gestion_cycab1, NULL);
        pthread_create (&thread_cycab2, NULL, gestion_cycab2, NULL);
     
    #if 1
        pthread_join (thread_cycab1, NULL);
        pthread_join (thread_cycab2, NULL);
    #endif
     
        return 0;
    }
    Dans cette exemple j'ai volontairement mis dans le thread2 une tache "légère", un cout. En sortie je vois que mon programme bloque sur le thread2 et ne redonne pas la main au thread1, ou tres rarement.
    Comment puis-je mieux répartir les ressources processeurs entre ces 2 threads ?

    merci par avance

  2. #2
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Comment fais-tu pour savoir que ton programme "bloque" sur le thread 2 ? Tu te fie aux log sur la console ? Ton thread 1 fait aussi des affichages sur la console ?

    As-tu essayé en :
    - commentant la ligne bayoccfil.raz_vec_occ_grid_point(); ?
    - mettant un simple cout<<"traitement thread 1"<<endl; dans le thread 1 ?

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par Javatator
    En sortie je vois que mon programme bloque sur le thread2 et ne redonne pas la main au thread1, ou tres rarement.
    Pour être sûr: T'as bien un système avec plusieurs processeurs ou un multi-core?

    Citation Envoyé par Javatator
    Comment puis-je mieux répartir les ressources processeurs entre ces 2 threads ?
    En général on fait un thread-manager. Il faut réussir à subdiviser chaque tâche en blocs (typiquement une "granularité" de l'ordre de 100 000 instructions). Le manager distribue alors le travail de chaque bloc au fur et à mesure à l'un ou l'autre des threads dès que celui ci vient de finir un bloc.
    Si par exemple une tâche prend bien moins de temps qu'une autre, ce n'est plus un problème puisque les blocs auront été réparti de manière à peu près équitable (ça dépend de la granularité) sur les threads.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Dans cette exemple j'ai volontairement mis dans le thread2 une tache "légère", un cout. En sortie je vois que mon programme bloque sur le thread2 et ne redonne pas la main au thread1, ou tres rarement.
    A priori, c'est tout simplement parce que la tâche du thread2 est très rapide et celle du thread1 plus longue.

Discussions similaires

  1. [VB.Net][Threading] Problème de parent ...
    Par maitrebn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/01/2006, 11h05
  2. Thread problème pour l'arreter
    Par rvzip64 dans le forum Langage
    Réponses: 8
    Dernier message: 12/07/2005, 10h51
  3. [Thread]Problème de processus
    Par berg dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 18/06/2005, 20h40
  4. Thread--> problème avec ThreadProc
    Par stof dans le forum MFC
    Réponses: 33
    Dernier message: 08/06/2005, 13h47
  5. Réponses: 4
    Dernier message: 14/01/2005, 19h41

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