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 :

fork wait


Sujet :

POSIX C

  1. #1
    lafracas
    Invité(e)
    Par défaut fork wait
    Rebonjour,

    j'utilise des fork dans un projet. En fait ca suit le modèle Lecteur/Redacteur. Des clients veulent faire des modifs, supp, conusltations sur un fic. Le serveur gere ces requetes.

    Je veux utiliser un fork pour les consultations afin de creer des fils et d'améliorer le rendement du programme.

    Probleme : il ne faut pas qu' il y ai des modifs sur fichier en meme temps que des consultations.

    alors en fait , du coté serveur , la ou je traite les modifs, supp, je veux faire des wait pour que le serveur attende que tous ces fils crees soient terminés.

    Or, je sais qu'il existe une fct wait(pid) qui permet d'attendre un fils de pid donné mais si j'en ai plusieurs comment je fais , il n'existe poas une fonction pour attendre tous les fils du processus pere ?

    merci

    ++ lafracas

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    En pratique il faut mettre en place le systeme de terminaison répartie pour ne pas avoir de processus zombie, une solution est d'utiliser un jeton circulant.
    Maintenant il y a peut etre une fonction en C qui fait cela mais ca m'etonnerais

    Bon courage

  3. #3
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Si ton processus pere connait le nombre de processus à attendre, une solution simple est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define N 5   /* le nombre de fils à attendre */
     
    <....>
    int i;
    for(i=0; i<N; i++){
        wait(NULL);
    }
    /* quand le pere passe ici, c'est que tous les fils se sont termines */
    <...>
    Bien evidemment, cette solution ne fonctionne que si c'est le pere qui a créé tous les fils : s'il y a des créations "imbriquée", c'est un poil plus embetant à mettre en place, mais le principe restera le meme.
    Ma solution te permet de ne pas avoir a te preoccuper des pid de tes fils. (tu peux toujours faire un tableau les contenant si ca t'amuse
    Et sinon, si tu veux faire de la synchronisation avancée, regarde donc du cote des semaphores (fonctions sem_wait, sem_post, etc....)

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

Discussions similaires

  1. Fork & wait(0)
    Par stoner dans le forum Débuter
    Réponses: 7
    Dernier message: 14/02/2013, 02h38
  2. Fork et wait
    Par ugo188 dans le forum Général Python
    Réponses: 24
    Dernier message: 26/01/2010, 14h18
  3. [debutant] fork et wait
    Par nyakooza dans le forum Linux
    Réponses: 4
    Dernier message: 26/08/2008, 21h27
  4. fork() wait() waitpid() et companie
    Par guillaume_60 dans le forum POSIX
    Réponses: 3
    Dernier message: 23/05/2006, 12h03
  5. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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