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

Windows Discussion :

threads et variables communes


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Points : 40
    Points
    40
    Par défaut threads et variables communes
    voila j'ai plusieurs threads (sur cela je suis a jour)
    cote synchro je suis a jour
    cote mutex je suis a jour
    cote section critique je suis a jour.

    Il me reste une question qui me titille.
    dans le cas d'une variable globale (un bon vieux extern * T)
    si cette variable est utilisée par plusieurs thread (en meme temps)
    faut il obligatoirement la rentrer en mutex ou section critique

    En effet, si cette variable a un sens precis est qu'une sequence lecture/test/ecriture se produit dessus au meme moment par 2 threads, cela peut donner un resultat erroné. Donc mutex/section critique.

    Ma question est : dans le cadre d'une variable qui est juste en lecture seule, cela pose t il rellement probleme ? La je ne sais pas mais 2 threads qui accedent a la meme case memoire, cela peut il produire une erreur ?

    Idem si ma variable est en lecture/ecriture mais que sa valeur a tres peu d'importance (par exemple une variable qui recoit une sorte d'horloge d'un thread et qui est consulté par un autre thread). Je me demande si l'acces simultané en lecture ecriture sur la meme case memoire est susceptible de lever une exception a l'interieur du processus ???

    Comprenez moi, ce n'est pas pcq j'ai 2 threads que j'ai envie de mettre des mutex a droite et a gauche.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut Re: threads et variables communes
    Bonjour,
    je pense que tu répond à tes questions tout seul :
    Citation Envoyé par buzzz
    dans le cas d'une variable globale (un bon vieux extern * T)
    si cette variable est utilisée par plusieurs thread (en meme temps)
    faut il obligatoirement la rentrer en mutex ou section critique
    En effet, si cette variable a un sens precis est qu'une sequence lecture/test/ecriture se produit dessus au meme moment par 2 threads, cela peut donner un resultat erroné. Donc mutex/section critique.
    Oui c'est le problème avec les variables globales.


    Citation Envoyé par buzzz
    Ma question est : dans le cadre d'une variable qui est juste en lecture seule, cela pose t il rellement probleme ? La je ne sais pas mais 2 threads qui accedent a la meme case memoire, cela peut il produire une erreur ?

    Idem si ma variable est en lecture/ecriture mais que sa valeur a tres peu d'importance (par exemple une variable qui recoit une sorte d'horloge d'un thread et qui est consulté par un autre thread). Je me demande si l'acces simultané en lecture ecriture sur la meme case memoire est susceptible de lever une exception a l'interieur du processus ???
    Dans le premier cas je ne pense pas qu'il y ai de problème dans le second si la valeur n'est pas critique c'est pas génant.

    Enfin je ne suis pas spécialiste des thead mais cela semble logique.

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    Les accès concurrents à une variable ne déclenchent pas d'exception, mais plutot des états incohérents dans ton programme qui eux peuvent créer des erreurs dans ton code (par exemple tu lis 10 là où juste après ça devient 11...).
    Les variables globales (ou plutot statiques) sont en effet problématiques en multithreading.
    Après faut-il controler les accès via des mutex/section critiques, c'est à toi de voir, mais sache que dès qu'un thread est suceptible de lire une variable qu'un autre modifie tu risques d'avoir des problèmes, d'autant plus dangereux qu'il vont apparaitre rarement, mais sûrement (et à cause de Murphy au plus mauvais moment).
    Par exemple le code suivant:
    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
    static maclasse * instance = 0;
    
    void thread1()
    {
        if ( ... )
        {
            instance = new maclasse;
        }
        else
        {
            delete instance;
            instance = 0;
        }
    }
    
    void thread2()
    {
        if ( instance != 0 ) // probleme !
        {
            instance->Fonction();
        }
    }
    Il faut ici utiliser un mutex car un jour va arriver où juste après le test "instance != 0" dans thread2, thread1 va s'exécuter et libérer instance et le mettre à zéro. Puis thread2 reprend la main et après...

  4. #4
    Membre du Club Avatar de GETah
    Inscrit en
    Décembre 2004
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 77
    Points : 67
    Points
    67
    Par défaut
    Si tu ne fais que lire ta variable globale, c pas la peine de la rendre ds une section critique!
    et une autre chose! deux threads ne s'executent jamais en meme temps souviens toi des quntums que donne l'OS à chaque processus! c la meme chose avec les threads qui sont consideré comme des processus (legers)qui partagent le meme code.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/07/2014, 10h39
  2. variables communes à plusieurs thread
    Par Z-fly dans le forum C
    Réponses: 10
    Dernier message: 10/09/2008, 08h59
  3. [javascript] Variable commune à pages js
    Par TERRIBLE dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/02/2006, 20h39
  4. [débutant] Nom de variable commun
    Par karidrou dans le forum Access
    Réponses: 2
    Dernier message: 07/12/2005, 17h09
  5. Réponses: 5
    Dernier message: 20/09/2005, 22h48

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