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 :

pthread et problème de valeur de variables globales


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 58
    Par défaut pthread et problème de valeur de variables globales
    Bonjour,

    j'ai créé une application utilisant pthread je déclare donc des variables globales qui seront utilisées par les threads. Avant de lancer les threads j'initialise ces variables, je vérifie que mes variables globales ont les bonnes valeurs jusque là tout va bien, mais lorsque que je vérifie ces variables dans les threads ceux ci ont comme valeur 0, mais celà n'arrive pas tout le temps des fois lorsque je lance l'application les variables ont les bonnes valeurs et d'autres fois elles ont 0 comme valeur.

    J'ai déclaré mes variables dans un fichier global.h avec le mot clé extern puis je les ai définis dans global.c.

    Quel est le souci

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Bonsoir,

    Tu pourrais nous montrer ton code sera plus explicite en plus de tes explications. Tu as à ta disposition la balise code symbolisée par #.

    cordialement
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 58
    Par défaut
    J'ai mon fichier global.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef GLOBAL_H
    #define GLOBAL_H
     
    extern int nombreTest;
     
    #endif
    mon fichier global.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include "global.h"
     
    int nombreTest;
    dans mon main.c j'inclue global.h et j'apelle une fonction(qui se trouve dans un autre fichier) qui initialise cette variable par exemple à 100 et je créer ensuite mes threads
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     pthread_create(&thread, NULL, routine,NULL);
    et dans la routine lors de certaines exécutions ma variable a pour valeur 100 et à d'autre moment 0.

    Ma routine est dans un autre fichier qui lui même à inclue global.h

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "global.h"
     
    int nombreTest;
    Lorsque tu inclue ton fichier global.h dans ton fichier.c, pourquoi ensuite tu déclares un int nombreTest;?

    Est ce qu'il n'y a pas d'ambiguité entre lavariable qui se trouve dans ton fichier global.h et celui, elles ont le même nom de variable.

    Tu as essayé de mettre en commentaire le int nombreTest; et d'exécuter ton programme pour voir ce que ça donne?
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 58
    Par défaut
    Je met int nombreTest dans mon fichier global.c pour définir cette variable le fichier global.h me permet d'inclure cette variable dans tout mes autres fichiers.

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Je ne sais pas comment ta conçu la fonction qui initialise ta variable global, mais s'il se trouve dans un thread à part que celui qui lit ta variable global, il va te valloir étudier la notion de section critique qui permet d'éviter en même temps qu'un thread est en train d'écrire sur quelque chose, un autre vient faire une lecture .
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 58
    Par défaut
    Ma fonction d'initialisation est appelée bien avant la création des threads donc dans ce cas je n'ai pas besoin d'utiliser de mutex, je ne fais que lire la variable dans les autres pthreads.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/05/2009, 17h53
  2. Problème attribution valeur recordset variable
    Par bobosh dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/08/2008, 15h51
  3. Problème de visibilité des variables globales
    Par imaril dans le forum MATLAB
    Réponses: 3
    Dernier message: 21/04/2008, 02h20
  4. Problème de portée de variable globale
    Par draudrau dans le forum C
    Réponses: 16
    Dernier message: 06/11/2007, 09h27
  5. Problème pour modifier une variable globale
    Par supertom dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 07/06/2007, 18h00

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