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 :

endormir thread , verifier et reveiller?


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Points : 20
    Points
    20
    Par défaut endormir thread , verifier et reveiller?
    Bonjour,
    Je voudrais endormir un thread , verifier dans le thread principal s'il ce thread et endormis ou non et le reveiller si oui . Est-ce possible?

    merci d'avance.

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonsoir,

    Sous Linux il n'y a pas de primitive pthread_xxx permettant de geler un thread, et c'est tant mieux, en effet on ne bloque pas un thread de l'extérieur alors qu'on ne sait pas où il en est dans son exécution.

    Cela veut dire que vous devrez prévoir ce gel dans le code exécuté par le thread à bloquer, cela peut se faire via un mutex et un int ou une condition et un int. L'int permet à la fois au thread de savoir s'il doit se bloquer et au thread bloquant de savoir si le thread c'est bloqué, le mutex ou la condition permettent de bloquer puis débloquer le thread.

    Par exemple l'int vaut 0 lorsque le thread1 ne doit pas se bloquer et n'est pas bloqué, et le mutex n'est prit par personne. Lorsque le thread2 veut bloquer le thread1 il prend le mutex et passe l'int à 1. Lorsque le thread1 voir l'int à 1 (test explicite dans son code à differents endroits) il passe l'int à 2 et essaye de prendre le mutex ce qu'il ne peut pas faire et donc se bloque. Lorsque le thread2 veut débloquer le thread1 il relache le mutex, le thread1 peut redemarrer, il prend le mutex, le relache immédiatement et passe l'int à 0. Le fait que l'int est à 2 indique que le thread est bloqué.
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Il faut voir le besoin, mais les conditions variables ont la propriété agréable que notifier sur une condition variable ne fait rien si personne n'était endormi dessus.

    Tu peux donc, si cela est applicable, te contenter de notifier la condition variable sans vérifier que le thread est endormi (attention par contre : si le thread s'endort juste derrière, il ne sera pas réveillé par la notification précédente, l'évènement est perdu, il faut donc bien vérifier tes enchaînements pour voir si tu ne risques pas d'arriver à un état de blocage).

Discussions similaires

  1. [Thread] Reveiller un thread a partir d'un autre thread d'une autre classe
    Par arnolpourri dans le forum Concurrence et multi-thread
    Réponses: 18
    Dernier message: 11/04/2007, 15h18
  2. Comment endormir les threads.
    Par L4BiN dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 10/08/2006, 07h56
  3. [THREAD] reveiller un thread qui dort
    Par silouane dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 24/01/2006, 13h39
  4. [Thread] petit problème au niveau du reveil d'un thread
    Par sagitarium dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 13/01/2006, 11h35
  5. Endormir un ensemble de thread.
    Par zeroox dans le forum POSIX
    Réponses: 5
    Dernier message: 06/11/2005, 17h45

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