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

Threads & Processus C++ Discussion :

Thread, Mutex et bug ^^


Sujet :

Threads & Processus C++

  1. #1
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut Thread, Mutex et bug ^^
    Bonjour,

    Je post ce message car je rencontre un problème que je ne parviens pas à résoudre. Un des thread de mon application se fige après l'appelle au blocage d'une mutex. J'ai beau chercher, je ne trouve pas la cause :/ En plus je me suis un peut laisser aller quand j'ai coder et maintenant j'ai un peut du mal à retrouver ce que j'ai fait ^^

    Je voudrait donc savoir si vous aviez une idée de ce qui pourrait être la cause.

    Voici les sources : http://t4cwebserver.free.fr/SDL_MMORPG/doc/html/

    Le thread s'arrête dans le fichier ClientSocketThread.cpp à la ligne 26 : ClientChar::Instance().LockMutex();
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Ben oui, c'est le principe des mutexes... Ton application attend jusqu'à ce que le verrou soit libéré. Si ça n'arrive jamais, ben ton application bloque éternellement.
    Boost ftw

  3. #3
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Ce qui sous entend que la mutex est déjà bloquer dans un autre thread... Sauf que je n'utilise pas (encore) cette objet à un autre moment...
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    ne serait-il pas crée et initialisé locké ?

  5. #5
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    Citation Envoyé par JC_Master
    Ce qui sous entend que la mutex est déjà bloquer dans un autre thread... Sauf que je n'utilise pas (encore) cette objet à un autre moment...
    Si tu as plusieurs instance de ton programme qui tournent, il se peut que ton Mutex soit partagé entre les processus ! Cela pourrait etre une cause du comportement que tu observes. Dans ce cas c'est dans l'initialisation du mutex qu il faut aller taper.

    Sinon verifie ce que dis Olive Le malin
    Sinon tu peux essayer d'utiliser des Semaphores; ca offre plus de possibilités. ... une fois j avais un problème de blocage (que je ne comprenait pas) avec un mutex, j ai migré vers des semaphore et tout va bien :-)
    Pour les details, cherche tout seul !

  6. #6
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Citation Envoyé par Wikipedia
    Un sémaphore est une variable protégée (ou un type de donnée abstrait) et constitue la méthode utilisée couramment pour restreindre l'accès à des ressources partagées (par exemple un espace de stockage) dans un environnement de programmation concurrente. Le sémaphore a été inventé par Edsger Dijkstra et utilisé pour la première fois dans le système d'exploitation THEOS.

    Les sémaphores fournissent la solution la plus courante pour le fameux problème du « dîner des philosophes », bien qu'ils ne permettent pas d'éviter tous les interblocages (ou deadlocks). Pour pouvoir exister sous forme logicielle, ils nécessitent une implémentation matérielle (au niveau du microprocesseur), permettant de tester et modifier la variable protégée au cours d'un cycle insécable.
    Hum, quel est la différence avec un mutex? (Si ce n'est l'existence matériel et non uniquement logiciel de ce dernièr)

    De plus, je crois qu'il serait plus judicieux que je réécrive le code en java, car ça m'évitera d'empiler des librairies alors que l'API de java dispose déjà de tout ça, surtout actuellement le programme est loin d'effectuer un record de vitesse, c'est tout juste si l'affichage reste correcte...

    Enffin, merci quand même de vos réponses ^^
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un mutex est plus comme un sémaphore binaire : ll n'y a qu'une seule ressource.
    De surcroit, il peut être implémenté de manière à ce qu'un même thread puisse le réserver deux fois sans de deadlocker tout seul (c'est le cas des mutex Windows).

    De plus, les mutexs POSIX sont locaux à un processus contrairement aux sémaphores.

    Bref, il y a facilement des différences.
    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.

Discussions similaires

  1. [boost::thread] [mutex] Threader une méthode
    Par Flob90 dans le forum Boost
    Réponses: 5
    Dernier message: 16/05/2009, 20h01
  2. thread, mutex, etc
    Par Ange_blond dans le forum Threads & Processus
    Réponses: 27
    Dernier message: 28/05/2008, 09h13
  3. multi-threads : mutex et conditons
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 16/12/2007, 22h31
  4. threads & mutex
    Par keni dans le forum C
    Réponses: 3
    Dernier message: 23/02/2007, 16h53

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