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 :

partage de variables globlales entre threads


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut partage de variables globlales entre threads
    Bonjour,
    Est ce que les threads partagent une variable globale ?
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static void* ma_fonction(void* data)
    {
        ...
        var_global = 1; // line 36
        ...
    }
     
    extern pam_sm_authenticate( )
    { 
          var_global = 0;
          ...
          ...
    }
    la compilation me donne :
    mon_fichier.c:36: erreur: 'var_global' undeclared ( first use in this function )

    Est ce que deux threads appartenant à un meme processus ne partage pas une meme variable globale ?
    merci d'avance

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Deux threads d'un même processus dans un même exécutable partagent leurs variables globales.

    Encore faut-il qu'elles soient correctement déclarées dans les unités de compilation où elles sont utilisées...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut probleme non resolu : rectification
    Bonjour,
    petite précision (j'ai oublié de préciser un détail important du code ) : ma var_global est declarée dans ma fonction pam_sm_authenticate( ) qui est le thread principal et ptreahd(thread_aux, NULL, ma_fonction, void* data) est le thread qui partage var_global avec le premier. Pour illustrer voici le code :

    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
    static void* ma_fonction(void* data)
    {
        ...
        var_global = 1; // line 36
        incrementer(var_global);
        ...
    }
     
    extern pam_sm_authenticate( )
    { 
          var_global = 0; // declaration de la variable globale
          modifier(var_global);
          ...
          pthread_create(thread_aux, NULL, ma_fonction, void* data); // ma_fonction doit incrémenter var_global
          ...
    }
    Citation Envoyé par Médinoc Voir le message
    Deux threads d'un même processus dans un même exécutable partagent leurs variables globales.

    Encore faut-il qu'elles soient correctement déclarées dans les unités de compilation où elles sont utilisées...
    ma question :
    - est ce vraiment une variable globale dans cette cas de figure ?
    - est elle déclarée au bon endroit ?

    Merci d'avance

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne vois pas de déclarations de variables dans ton code, seulement des affectations...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    j'ai oublié le int devant var global
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    static void* ma_fonction(void* data)
    {
        ...
        var_global = 1; // line 36
        ...
    }
     
    extern pam_sm_authenticate( )
    { 
          int var_global = 0; // declaration de la variable globale
          ...
          ...
    }

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ne serait-il pas plus simple d'avouer que tu n'as aucune idée de ce qu'est une variable globale?

    http://emmanuel-delahaye.developpez....e=Page4#LXVIII
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Partage variable entre Threads
    Par fiberMan dans le forum C#
    Réponses: 21
    Dernier message: 08/04/2011, 16h09
  2. Partage de variable static entre deux lib
    Par sapin dans le forum Débuter
    Réponses: 7
    Dernier message: 19/06/2010, 18h40
  3. Partager des variables entre Threads
    Par ToTo13 dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 01/04/2010, 16h09
  4. partager un PTK Mainwindow entre thread ?
    Par mohaz dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2007, 00h08
  5. [débutant] partage de variable par plusieurs threads
    Par dahtah dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 06/03/2007, 13h34

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