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 :

multitache et signalisation d'évènements


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut multitache et signalisation d'évènements
    Bonjour,

    Je bute sur une petite chose, j'espère que certains auront plus d'inspiration que moi !

    Je développe une appli en linux embarqué (ca ne change rien au problème) et je voudrais pouvoir avertir plusieurs threads d'un évènement: l'appui sur un bouton poussoir. Un thread qui gère les entrées-sorties devra donc avertir tous les autres, leur nombre est variable, entre 2 et 10.

    Je pensais utiliser des signaux mais j'ai lu ceci (ici):
    Afin que sigwait fonctionne de manière fiable, les signaux que l'on attend doivent être bloqués dans tous les threads, pas seulement le thread appelant, sinon les sémantiques de POSIX concernant le traitement du signal ne garantissent pas que le thread appelant sigwait sera celui recevant le signal. La meilleur manière d'assurer cela est de bloquer ces signaux avant de créer les threads puis de ne jamais débloquer ces signaux dans aucun de ces threads sauf en appelant sigwait
    Donc je ne peux pas utiliser de signaux, ca semblait parfait, existe-t'il d'autres systèmes que je pourrais utiliser ?

    Merci d'avance, Romain.

    PS: je suis plus habitué en programmation sur microcontrôleurs, c'est un de mes premiers programmes sous linux...

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Pour la synchro entre thread, tu as les familles de fonctions pthread_cond_*() et pthread_barrier_*() .
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    OK merci,
    j'ai tenté avec pthread_cond pour l'instant et seulement un thread est débloqué du pthread_cond_wait, c'est le premier qui appelle cette fonction.
    pourtant j'utilise pthread_cond_broadcast qui devrait débloquer tous les threads en attente, non ?

    EDIT 2min après:
    J'avais mis un mutex par tache, en le mettant global ca fonctionne parfaitement !!


    pthread_barrier me parait assez obscur pour l'instant, je vais potasser...

    Romain.

Discussions similaires

  1. Pas d'événement OnClose quand on arrête W2K
    Par Altau dans le forum C++Builder
    Réponses: 9
    Dernier message: 26/01/2009, 18h36
  2. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  3. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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