Partage
  • Partager sur Facebook
  • Partager sur Twitter

Discussion Pere vers Fils : Processus

Processus discussion pere fils langage C

    29 janvier 2021 à 14:29:28

    michelbillaud a écrit:

    Un problème avec un numéro de descripteur incorrect ?

    Look

    void fils(int num_fils, int nb_fils, int *tube){
    
       read( tube[ 2 * nb_fils ] , ..., ....);


    > J'ai modifié mon code à partir de tes conseils.

    Dans le genre "et c'est donc à cause de tes conseils à la noix que ça ne marche pas" :-)

    Mon code est désormais fonctionnel ! Merci !!! 

    Je n'avais vu cette erreur bête !

    J'ai quelques petites questions pour bien comprendre ces histoires de processus...

     1. Etant donné qu'on crée N fils, on crée donc N tubes et lorsqu'on fait un appel avec fork pour créer justement un fils, est ce que le fils en question (celui qu'on vient de créer) à la possibilité d'accéder au N tubes qu'on a créé ?

       =>  Si oui ca veut dire qu'on va devoir fermer l'accès à tous les tubes qui ne lui sont pas destinés... ?

    2. Etant donné qu'on instancie des variables dans le début du main(), est ce que les fils ont accès à ces variables ? 

        => Si oui cela voudrait dire que on aurait pas besoin de passer en paramètre des arguments tels que num_fils, nb_fils et tube, comme j'ai fait... ?

    3. Je fais une boucle for() pour créer les N fils, dans cette boucle je teste si le retour du fork vaut 0 si oui on est dans le fils, si c'est supérieur à 0 on est dans le père. Mais le code en dehors de la boucle for(), il est exécuté uniquement par le père n'est ce pas ???

    => De plus peut on prédire à quel moment les fils vont exécutés leur instructions (avant le père ou après). Ou alors ca dépend du nombre d'instruction de chacun...?

    Voici une illustration de mes propos : 

    for( i=0 ; i < nb_fils ; i++);{
     
     if( (pid = fork(...)) == -1){
       /* Erreur */
      }
     
     if( pid ==0 ) {
      /* On est dans le fils*/
     }
    
     if( pid > 0){
      /* On est dans le père */
     }
    
    }// Fin du for
    
    /* Ici le code est exécuté par le père 
     * UNIQUEMENT ?
     */
    

    4. Comment pourrais t on implémenter un message qui serait envoyé par le fils vers son père, pour dire au père qu'il a bien reçu son message, ca signifie qu'il faudrait en tout (2 * nb_fils) tubes anonymes ?



    -
    Edité par NATHdb 29 janvier 2021 à 14:33:00

    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2021 à 14:49:46

      En effet il y a un problème de "fuite de descripteurs", les fils héritent de bouts de tuyaux qui ne les concernent pas. Ce qui est un problème.

      Dans la branche "fils" du fork, on devrait fermer  les descripteurs qui permettent au père de causer aux autres.

      Trop de questions. Pour celle-ci

      > peut on prédire à quel moment les fils vont exécutés leur instructions (avant le père ou après).

      la réponse est non. Les processus vivent leur vie, au gré de la fantaisie de l'ordonnanceur. Si on veut y mettre de l'ordre, il faut synchroniser explicitement (verrous, sémaphores, etc.)


      Pour envoyer des messages au père, il pourrait y avoir un "canal" commun à tous les fils. Il suffira alors de mettre, dans le message, une indication de l'envoyeur.

      -
      Edité par michelbillaud 29 janvier 2021 à 20:44:37

      • Partager sur Facebook
      • Partager sur Twitter

      Discussion Pere vers Fils : Processus

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown