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

Linux Discussion :

threads et signaux


Sujet :

Linux

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 136
    Points : 100
    Points
    100
    Par défaut threads et signaux
    Bonjour,
    Une question sur les threads et les signaux quand ils sont utilisés ensembles.

    supposons qu'un processus p1 crée un ou plusieurs threads, un autre processus p2 envoie un signal (ex: SIGUSR1) au processus p1.

    Qui est ce qui traitera le signal ?

    A mon avis ça devrait être le thread principal, et les autres threads crées ne sont pas concernés.

    J'attend votre avis.

    merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 136
    Points : 100
    Points
    100
    Par défaut
    J'ai encore une autre question,

    Est-il permis de créer un thread dans un gestionnaire de signal ? Autrement dit, la fonction pthread_create() est-elle réentrante ?

    merci

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    1) le signal serra traiter par la thread l'ayant demandé (poser la gestion de signaux), il est plutot normal que ce soit la treah principale qui pose et gere les signaux mais rien ne l'oblige.

    2) oui on peut creer un thread dans une gestion de signaux, même si cela n'est pas conseillé, (probleme de recuperation de handler de thread, de resultat , ......).
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Citation Envoyé par igorIgor
    Est-il permis de créer un thread dans un gestionnaire de signal ? Autrement dit, la fonction pthread_create() est-elle réentrante ?
    Règle de base de la gestion des signaux : lorsque tu es dans un handler, tu en fais le moins possible. C'est à dire que ton code se limite généralement à changer la valeur d'une variable, ou ce genre d'opération.
    Cela permet d'éviter des interblocages qui conduisent souvent purement et simplement à la mort du processus.

    Donc même s'il est théoriquement possible de faire ce que tu veux, c'est plus que très fortement déconseillé.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 136
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    En réalité, je voudrais créer un gestionnaire qui crée deux threads qui vont servir de files d'attente à un autre processus.
    donc un processus client demande au processus maitre l'ouverture de 2 files d'attente, ce derniers crée deux threads qui alimentent les files 'attentes.
    y a t il une autre solution?
    merci

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Et en quoi as-tu un problème avec la gestion des signaux ?
    • P1 : en attente active tant que la variable create_threads est à 0
    • P2 : envoie un signal SIGUSR1 à P1
    • P1 : catch le signa SIGUSR1, et met create_threads à 1
    • P1 continue sa vie. Comme create_threads n'est plus à 0, il va rentrer dans une portion de code qui va créer les deux threads demandés par P2.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 136
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    Je ne voudrais pas utiliser l'attente active, ça consomme beacoup n'est ce pas?
    En plus si je suis une telle philosophie, je dois utiliser un mutex sur la variable create_threads.

    merci

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Peux-tu décrire plus précisément ce que doivent faire tes deux processus ?

    En effet, je ne vois pas ce que fais le processus maître à part créer des threads lorsque le second process lui demande...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Points : 399
    Points
    399
    Par défaut
    Bonjour,
    est-ce qu'un couple mutex/condition ne pourrait pas faire l'affaire?
    tu n'auras pas d'attente active pour le processus en attente d' "ordre" de création de threads.
    Dans ton signal handler, il suffit alors de verrouiller le mutex, modifier ton flag global et de signaler sur la variable condition, en oubliant pas de relâcher le mutex.

    S. Desbois

Discussions similaires

  1. [WD17] Synchronisation de threads avec signaux, comportement bizarre
    Par droliprane dans le forum WinDev
    Réponses: 7
    Dernier message: 08/10/2014, 18h57
  2. [WD17] threads et signaux - pauze dans boucle ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 2
    Dernier message: 15/10/2012, 18h05
  3. WinForms et Threads / Signaux
    Par Invité(e) dans le forum C++/CLI
    Réponses: 1
    Dernier message: 23/06/2008, 14h03
  4. [Qt 4] signaux non reçus entre thread
    Par tut dans le forum Qt
    Réponses: 6
    Dernier message: 28/10/2006, 13h52
  5. pb signaux (et threads..)
    Par ramislebob dans le forum Langage
    Réponses: 1
    Dernier message: 10/07/2006, 14h25

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