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

wxWidgets Discussion :

mutex global et plantage


Sujet :

wxWidgets

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 48
    Points : 17
    Points
    17
    Par défaut mutex global et plantage
    Bonjour à tous,

    Je viens vous voir pour un problème embêtant. Je suis confronté à un bug très aléatoire dans mon programme. Je suspecte deux threads d'essayer d'accéder en même temps (mais uniquement en lecture) à une même variable. Je ne sais pas si ce genre de comportement peut entrainer un plantage, dites moi ce que vous en pensez.

    Je souhaite donc mettre en place un mécanisme de Mutex pour protéger l'accès à cette variable. Seulement cette variable est accédée depuis différents threads (dans ce cas là on pourrait penser à une déclaration de variable statique dans la classe qui dérive de wxThread), et plus précisément pas les objets instanciés dans ces threads (qui correspondent à 2 classes différentes). Du coup je dois partager mon mutex.

    Ma question est donc de savoir comment déclarer un mutex global en C++.
    Je ne sais pas comment et où le déclarer dans mon programme étant donné que c'est de la POO.
    De plus si vous pouviez me donner votre avis quand à la possibilité de plantage en cas d'accès simultané en lecture sur une variable.

    Je vous remercie d'avance,... et très Joyeux Noel à tous.

    Merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par devdebutantajax Voir le message
    Bonjour à tous,

    Je viens vous voir pour un problème embêtant. Je suis confronté à un bug très aléatoire dans mon programme. Je suspecte deux threads d'essayer d'accéder en même temps (mais uniquement en lecture) à une même variable. Je ne sais pas si ce genre de comportement peut entrainer un plantage, dites moi ce que vous en pensez.
    Si c'est uniquement en lecture c'est peu probable. Néanmoins, c'est une bonne chose que de sécuriser les accès concurrents entre thread.

    Citation Envoyé par devdebutantajax Voir le message
    Je souhaite donc mettre en place un mécanisme de Mutex pour protéger l'accès à cette variable. Seulement cette variable est accédée depuis différents threads (dans ce cas là on pourrait penser à une déclaration de variable statique dans la classe qui dérive de wxThread), et plus précisément pas les objets instanciés dans ces threads (qui correspondent à 2 classes différentes). Du coup je dois partager mon mutex.

    Ma question est donc de savoir comment déclarer un mutex global en C++.
    Je ne sais pas comment et où le déclarer dans mon programme étant donné que c'est de la POO.
    Normalement, tu accèdes à ta variable par une méthode sur une instance d'un objet partagé. C'est à lui d'avoir la responsabilité de gérer l'accès concurrent. Donc cette classe doit avoir le mutex.

  3. #3
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Il y a 2 choix.
    Soit synchroniser un bout de fonction, soit synchroniser l'accès à une classe.

    Personnellement, j'utilise les criticals sections, et j'utilise ce code (ci-dessous) de codeproject. C'est simple et concis, il manque quelques fonctionnalités tel que TryEnterCriticalSection, mais c'est facile à ajouter.

    http://www.codeproject.com/KB/threads/cppsyncstm.aspx

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Salut devdebutantajax,

    Peu probable en effet qu'un accès en lecture provoque un problème entre threads...

    Pour partager des données entre threads,

    1) je crée une classe, que j'instancie une fois (normalement, quelque part lors de la construction du thread principal!), et dont je passe un pointeur à chaque thread que je crée.

    2) pour synchroniser les accès au pointeur, je crée également un mutex (en même temps que mon objet "d'échange"), et je le passe aussi sous forme de pointeur à tous mes threads.

    Comme ça, le thread qui veut accéder (en écriture) aux données partagées commance par acquérir le mutex partagé!

    Note que si tu n'as qu'une variable à partager, pas besoin d'une classe spéciale!

    Bastien

Discussions similaires

  1. [QThread] Plantage au déblocage des mutex
    Par chkpos dans le forum Multithreading
    Réponses: 2
    Dernier message: 21/02/2007, 19h48
  2. [Kylix] Plantage IDE Kylix3/Mandrake 9.0
    Par OmicroN dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2003, 23h04
  3. Fichier de fonctions globales
    Par PEM dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/07/2002, 21h35
  4. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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