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

POSIX C Discussion :

fonctionnement des threads


Sujet :

POSIX C

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 52
    Points
    52
    Par défaut fonctionnement des threads
    Bonjour à tous !

    Voila, j'ai essayé plusieurs tuto sur le net conçernant les threads.
    Le probleme, c'est que j'ai l'impression qu'aucun d'entre eux ne fonctionne sur ma machine.
    Voici un des tuto que j'ai trouvé sur le net :


    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
     
    void* maFonction(void* data);
     
    int main()
    {
        int i;
     
        pthread_t thread;
        pthread_create(&thread, NULL, maFonction, NULL);
     
        for(i=0 ; i<50 ; i++)
            printf("1");
     
       pthread_join(thread, NULL);
     
        return 0;
    }
     
    void* maFonction(void* data)
    {
        int i;
     
        for(i=0 ; i<50 ; i++)
            printf("2");
     
        return NULL;
    }
    normalement, ce code devrait me sortir quelque chose comme :
    1111111111222222222222221111111111111222222222221111111111112222222

    mais, à chaque éxecution, il m'affiche toujours :
    2222222222222222222222222222222222222221111111111111111111111111111111111

    J'aurais par conséquent besoin de vos lumieres pour savoir si il me manque quelque chose.

    Petit détail (peut être est-ce important ), je travaille sous une machine virtuelle ubuntu, et je possède un core 2 duo.

    D'avance merci pour vos aides précieuses

  2. #2
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Tu n'as aucune garantie que ton code affiche l'un ou l'autre. Il peut afficher n'importe quoi 111222 ou 12121212 ou 112212212 enfin... n'importe quoi.
    Ca vient du fait que tu crées un processus qui va s'exécuter en parallèle, et comme tu ne fais aucun contrôle sur le fait qu'un s'affiche avant l'autre tu as ce que ta machine à envie de te donner.
    Donc c'est tout à fait normal.
    Plus tu pédales moins fort, moins t'avances plus vite.

  3. #3
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Essais avec un traitement un peu plus long :
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    Merci de vos réponses !

    Malheureusement, le problème n'est pas encore résolu

    Même en rajoutant des itérations, cela ne change rien au problème, et j'ai lancé 10 fois de suite le programme, avec toujours le même résultat

    Une autre idée ?

  5. #5
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Heum, tu as lu ce que j'ai mis.
    Plus tu pédales moins fort, moins t'avances plus vite.

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Pouet_forever Voir le message
    Heum, tu as lu ce que j'ai mis.
    Oui, mais j'ai pas trop saisi se que je dois faire

  7. #7
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Tu peux avoir le résultat 111222111222... en utilisant les mutex. Si tu n'utilises pas les mutex, tu peux avoir n'importe quoi (donc pas forcement ce que tu attends).
    Plus tu pédales moins fort, moins t'avances plus vite.

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Pouet_forever Voir le message
    Tu peux avoir le résultat 111222111222... en utilisant les mutex. Si tu n'utilises pas les mutex, tu peux avoir n'importe quoi (donc pas forcement ce que tu attends).
    D'accord, donc si j'ai bien compris, je protege mon affichage par des mutex ?

  9. #9
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Si tu veux avoir exactement cette sortie-là oui : 1111111111222222222222221111111111111222222222221111111111112222222
    Comme je te l'ai dit, si tu as 2 threads en parallèle, il s'exécuteront en parallèle et tu n'as aucune garantie que les instructions du thread 1 s'exécute avant ceux du thread 2.
    Plus tu pédales moins fort, moins t'avances plus vite.

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    En fait, à la place de
    j'ai fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    pthread_exit(NULL);
    Puis avec les mutex, ça marche nickel !! merci en tout cas de ton aide et de ta patience ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonctionnement des threads
    Par AddicTion dans le forum C
    Réponses: 5
    Dernier message: 26/09/2013, 22h15
  2. le fonctionnement des thread
    Par Etudiante_Ines dans le forum Général Java
    Réponses: 3
    Dernier message: 12/03/2012, 10h20
  3. Croisements de threads / Fonctionnement des "delegate"
    Par Fabllot dans le forum C++/CLI
    Réponses: 3
    Dernier message: 18/07/2007, 12h18
  4. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  5. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53

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