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

POSIX C Discussion :

Suspension d'un thread par un autre


Sujet :

POSIX C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Suspension d'un thread par un autre
    Bonjour,

    J'aimerais savoir s'il est possible de suspendre l'exécution d'un thread A à partir d'un thread B.

    Un exemple d'utilisation :
    J'ai 2 threads, un thread d'affichage qui m'écrit un nombre aléatoire toutes les X secondes et un thread d'acquisition clavier qui peut suspendre l'exécution du thread d'affichage par l'appuie sur une touche quelconque.

    Comment pourrais-je réaliser cela ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    regardes du côté des mutex. C'est à ça qu'ils servent.
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Non, ça ne correspond pas à ce que je souhaiterais faire, il me faudrait la possibilité de mettre le thread en pause à n'importe quel moment, sans qu'il ait à faire quoi que ce soit, un peu comme si on l'enlevait de la pile d'execution de l'ordonnanceur. Je sais que sous solaris il existait des fonctions de type suspend() et resume(), est-ce que c'est toujours possible avec POSIX ?

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Non.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Ouwoh ! tu sais y mettre les formes ^^
    mais merci pour la réponse, on ne saurait être plus clair, et il y aurait pas un moyen, une technique ancestrale de sioux pour faire ce genre de choses ?

    Merci

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 378
    Points : 23 674
    Points
    23 674
    Par défaut
    Si tu tournes sur un Unixoïde, tu peux toujours envoyer SIGSTOP au bon processus…

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Je n'ai qu'un seul processus multithreads donc ça n'est pas possible, je pense que je vais devoir reprendre mon programme de A à Z et faire de la scrutation, tant pis pour moi j'avais qu'à y penser plus tôt ^^.

    Merci pour vos réponses !

  8. #8
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Si on envoie SIGSTOP au processus, on ne sais pas quel thread va le recevoir. Par contre on pourrait l'envoyer au bon thread avec pthread_kill().

    Par contre POSIX demande que SIGSTOP stoppe tous les threads du processus, donc ça ne marchera pas. Ou si ça marche, ce n'est pas portable puisque non conforme à la norme.

    Edit : d'ailleurs je ne sais pas si tu as pensé à toutes les ramifications, mais imagine que tu trouves un moyen de stopper ton thread où qu'il se trouve. Que ce passe-t-il si le thread que tu stoppes détient un mutex ? D'autre threads font finir par se bloquer. Et au pire le thread qui est chargé de débloquer le thread que tu as stoppé pourrait lui aussi finir par se bloquer.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Oui, j'y ai pensé, mais les threads que je souhaite mettre en pause sont des threads que je qualifierai d'indépendants, ils n'ont aucun accès à de la mémoire partagé. Le but de ces threads était de gérer une communication IP avec un serveur distant. Et comme la communication se fait en GPRS j'aurais souhaité les mettre en pause en cas de perte de couverture réseau. Donc pas de problème de mutex, de semaphore ou de conditions. Et ç'aurait pu m'être utile puisque je suis dans l'incapacité la plus complète de prévoir à quel moment j'aurais une mauvaise couverture ^^. Le but du jeu c'est de pouvoir continuer une conversation là où elle s'était arrêté au moment de la perte du réseau.

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

Discussions similaires

  1. [2D/3D] QGLwidget rafraichi par un autre thread ?
    Par LastSpear dans le forum Qt
    Réponses: 2
    Dernier message: 27/03/2010, 18h02
  2. WPF et modification interface par un autre thread comme les WF ?
    Par Yogy dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 04/03/2009, 17h04
  3. Fichier ecrit par un Thread et lu par un autre Thread
    Par Fladnag dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 27/04/2004, 14h56
  4. Rendre une disquette illisible par d'autres que moi
    Par kivoch dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 26/12/2003, 22h49
  5. Comment subsituer un chemin par un autre dans un réseau ?
    Par Baillard dans le forum Développement
    Réponses: 3
    Dernier message: 11/08/2002, 14h01

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