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 :

Synchroniser plusieurs processus avec SIGUSR1/SIGUSR2


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 12
    Par défaut Synchroniser plusieurs processus avec SIGUSR1/SIGUSR2
    Bonjour,

    j'ai un programme principal qui crée deux fils, puis execute calcul_1 et calcul_2. Je veux faire en sorte que les 3 processus aient fini leur calcul_1 avant que l'un d'eux ne commence le calcul_2.
    En gros je veux faire une barrière de synchronisation avec les signaux SIGUSR.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include <signal.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
     
    int main(int argc, char **argv){
    	int i = 0;
    	pid_t pid_fils[2];
    	struct sigaction act;
     
    	while ((i<2) && (pid_fils[i] = fork()) != 0))
    		i++;
     
    	calcul_1();
    	calcul_2();
     
    	printf("fin processus %d \n", i);
     
    	return EXIT_SUCCESS;
    }

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et la question est ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 12
    Par défaut
    La question est comment mettre en place une barrière de synchro à l'aide de SIGUSR1/SIGUSR2.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Par défaut
    utiliser SIGUSR1/SIGUSR2 pour ca me paraît compliqué, surtout si en fait ton exemple n'est qu'un code pour vérifier ce qui est possible et qu'en conséquence tu augmente le nombre de processus, etc.
    Voici une liste d'IPC : http://en.wikipedia.org/wiki/Interprocess_communication.

    Si tes processus ne sont pas sensés migrer, travaille sur de la mémoire partagée (ce qui te permettra également de faire circuler les résultats des calculs entre process) ; auquel cas voici des liens :
    http://www.opengroup.org/onlinepubs/.../shm_open.html

    (pour le C++ et portable : http://www.boost.org/doc/libs/1_36_0...erprocess.html)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Par défaut précisions
    au cas où la réponse n'aurait pas été comprise, il faut ensuite utiliser des mutex (ou semaphores) pour synchroniser ces processus.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par lemmel Voir le message
    utiliser SIGUSR1/SIGUSR2 pour ca me paraît compliqué,
    Citation Envoyé par lemmel Voir le message
    au cas où la réponse n'aurait pas été comprise, il faut ensuite utiliser des mutex (ou semaphores) pour synchroniser ces processus.
    Autant je suis d'accord avec la mémoire partagée sur une seule machine autnt une solution "simple" me semble effectivement plus basée sur les signaux que les mutex + le reste de ce que tu dis

    Citation Envoyé par micaz Voir le message
    La question est comment mettre en place une barrière de synchro à l'aide de SIGUSR1/SIGUSR2.


    Simplement en mettant une callback sur la réception de SIGUSR1 et faire appeler calcul2 après la mise d'un drapeau dans cette callback..

Discussions similaires

  1. Synchronisation de processus avec semaphores
    Par kaso54 dans le forum POSIX
    Réponses: 7
    Dernier message: 26/11/2008, 11h14
  2. Lancement de processus avec priorité
    Par GMI3 dans le forum Administration système
    Réponses: 2
    Dernier message: 14/06/2004, 16h43
  3. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 09h04
  4. Combiner plusieurs textures avec couches alpha
    Par TibobiT dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/05/2004, 15h20
  5. Economie de mémoire pour plusieur images avec la même source
    Par neness dans le forum Composants VCL
    Réponses: 5
    Dernier message: 18/01/2004, 10h56

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