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 :

Les Threads


Sujet :

Linux

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut Les Threads
    Bonjour,

    Je suis en train de bosser sur un petit projet avec les threads mais je rencontre un problème que je n'arrive pas à solutionner. Le programme dont le code est présenté ci-dessous, créé N threads en appelant une fonction bidon et attend ensuite l'ensemble des threads créés.

    Le problème c'est que le programme ne lance que 4 threads au lieu des 5 que je veux par exemple lui demander de lancer. De plus, le programme se termine par une 'segmentation fault'.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
     
     
    void * toto( void * param )
    {
        printf("Creation du thread numero %d\n", (int)param);
        return NULL;
    }
     
    int main( int argc, char **argv )
    {
        int i, N;
        pthread_t * pthread_id;
     
        N          = atoi(argv[1]);
        pthread_id = (pthread_t *)malloc(N);
     
        printf("Nb threads demandes : %d\n", N);
     
        for( i=0; i<N; i++ )
            pthread_create(&pthread_id[i], NULL, toto, (void *)i);
     
        for( i=0; i<N; i++ )
            pthread_join(pthread_id[i], NULL);
     
        printf("dellasocation ...\n");
        free(pthread_id);
     
        return EXIT_SUCCESS;
    }
    Voilà, j'espère que quelqu'un pourra donner une réponse à mes interrogations


    Nico

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Beaucoup d'erreurs dans ton code:

    on n'utilise plus atoi mais strtol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_id = (pthread_t *)malloc(N);
    c'est quoi la taille d'un pthread_t??

    En mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_id = (pthread_t *)malloc(N*(sizeof *pthread_id));
    Et après mettre le test pour voir si malloc a échoué...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_create(&pthread_id[i], NULL, toto, (void *)i);
    Les casts c'est mal... Tu passes un entier que tu transtypes en void* pour faire plaisir au compilateur. C'est dangereux et à mon avis, a un comportement indéterminé.

    Il faudrait allouer une zone mémoire, mettre la valeur, passer l'adresse de la zone et désallouer dans le thread lorsqu'on en n'a plus besoin...

    Jc

  3. #3
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Bon j'ai corrigé mes erreurs et tout fonctionne correctement. Je pense que le problème principal était lors de l'allocation mémoire. Merci pour ton aide

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

Discussions similaires

  1. Aide sur les Threads
    Par themoye dans le forum MFC
    Réponses: 24
    Dernier message: 06/03/2005, 15h02
  2. Les Threads... J'en remet une couche :)
    Par Higestromm dans le forum C++
    Réponses: 5
    Dernier message: 17/11/2004, 12h19
  3. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25
  4. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59

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