Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Langage c créer 10 fils fork



  1. #1
    SEIYA00

    Langage c créer 10 fils fork


    ------

    <citation rid="7066837">Bonjour, je vous contact car je dois faire un programme qui
    # crée dix fils ;
    # chacun des fils compte jusqu’à 5 millions, affiche un message; compte à nouveau jusqu’à 5 millions ;
    # attend après ses 10 fils et affiche leur ordre d’arrivée.

    mon probléme est la création des 10 fils, en fait j'ai fait :
    Code:
    for(i=0;i<10;i++)
    {
      pid= fork();
      printf("CREATION DU FILS %d pour le PERE %d\n",pid, getpid()); 
    }
    Mais le probléme c'est qu'avec ca les fils vont également utiliser fork, donc au final voila ce que j'ai fait

    Code:
    static int avosmarques ()
     {
            int i;
    	pid_t pid;
    	pid_t pid2;
            int p=0;
    
    
    for(i=0;i<10;i++)
    {
      pid= fork();
      printf("CREATION DU FILS %d pour le PERE %d\n",pid, getpid()); 
    
    
    if (pid==-1)
    {
           printf("erreur");
          exit(0);
    }
    
    else if (pid==0)
    {
     printf("fils"); 
     
    while (p<5000000)
      
    {
      p++;
    }
    
      exit(0);
    }
    
    else
    {
      printf("pere"); 
      
    for(i=0;i<10;i++)
    {
     pid2 =wait(0);
      printf("LE FILS : %d A TERMINE \n",pid2); 
    }
    
    }
      
    }
    return 0;
    	 
           }
    Malgrès ca j'ai un résultat bizarre, je m'attandais a avoir comme résultat 10 ligne avec Le fils ~ a terminé, mais au lieu de ca j'ai plein plein de ligne et il y a souvent des Le fils -1 a terminé

    Merci d'avance pour votre aide

    -----
    Dernière modification par SEIYA00 ; 31/01/2012 à 16h52.

  2. Publicité
  3. #2
    photon57

    Re : Langage c créer 10 fils fork

    Hello,

    regarde l'exemple suivant :

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    
    #define MAXFORK 10
    
    
    int main()
    {
      int pid[MAXFORK];
      int i,j;
      int fini;
    
    
      for(i=0;i<MAXFORK;i++){
        pid[i]=fork();
        if (pid[i]==-1) {
          // ERREUR
          fprintf(stderr, "Impossible de créer un fils (%d)\n",i);
        } else if (pid[i]==0) {
          // FILS
          printf("Fils %2d (PID=%d): Activé\n",i,getpid());
          fflush(stdout);
          for(j=0;j<5000000;j++);
          printf("Fils %2d (PID=%d): Fin\n",i,getpid());
          fflush(stdout);
          exit(0);
        } else {
          printf("Père : Activation du fils %2d\n", i);
          fflush(stdout);
        }
      }
    
    
      printf("Père : Fin des activations\nAttente ...\n");
      fflush(stdout);
      fini=0;
      while (!fini) {
        fini=1;
        for(i=0;i<MAXFORK;i++){
          if (pid[i]>0) {
            if (waitpid(pid[i],NULL,WNOHANG)==0) {
              printf("Père: fin du fils %2d (PID=%d)\n", i, pid[i]);
              fflush(stdout);
              pid[i]=0;
            }
          } else {
            fini=0;
          }
        }
      }
    
    
      printf("Fin de tous les fils.");
      fflush(stdout);
    
    
      return 0;
    }
    Il y a deux parties ; la création des fils puis l'attente du père pour la fin des fils. On garde les pid des dils dans un tableau. C'est pas optimisé mais ça te donne un exemple à partir duquel nous pouvons parler des difficultés que tu rencontres.

  4. #3
    polo974

    Re : Langage c créer 10 fils fork

    Arghhhh ! ! !
    Code:
     while (p<5000000)
        {   p++; }
    ça devrait être interdit d'écrire des trucs pareils...

    Non, sérieusement, faire une tempo en faisant une boucle, alors qu'il est question de fork, c'est un peu dommage. En multi tâche, quand un process n'a rien à faire, il se met en attente, il ne tourne pas en rond comme un fou, car les copains pourraient avoir besoin du cpu pour bosser...

    Il y a les fonctions sleep ou usleep ou nanosleep, il faut les utiliser, car au lieu de bouffer du cpu pour rien, elles donnent la main aux process qui en ont besoin et évitent de décharger la batterie pour rien.
    Jusqu'ici tout va bien...

  5. #4
    SEIYA00

    Re : Langage c créer 10 fils fork

    Effectivement, merci!!

  6. A voir en vidéo sur Futura
  7. #5
    grosmatou75001

    Re : Langage c créer 10 fils fork

    Citation Envoyé par polo974 Voir le message
    ça devrait être interdit d'écrire des trucs pareils...
    d'autant plus que le compilateur risque de virer toute la boucle. En effet elle ne sert à rien à part faire perdre tu temps au programme, or ce temps le compilateur fait tout pour le réduire au minimum...

Discussions similaires

  1. Créer des dossiers en langage C
    Par combieul dans le forum Programmation et langages, Algorithmique
    Réponses: 14
    Dernier message: 16/06/2021, 20h22
  2. Créer des fils d'info sur les questions récurrentes
    Par Saint-Sandouz dans le forum Contraception, gynécologie, grossesse et sexualité
    Réponses: 2
    Dernier message: 28/08/2011, 13h09
  3. Fontion Fork()
    Par Silver68 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 05/01/2009, 16h01
  4. [Thermique] Branchement thermostatTA Elro 2 fils sur chaudière 4 fils. [résolu]
    Par Shelby dans le forum Dépannage
    Réponses: 14
    Dernier message: 08/12/2008, 17h51
  5. Fonction Fork
    Par NAGHAM dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 24/05/2008, 15h52