Comment faire un fork() le nombre exact d'enfants
Donc je suis en train de travailler sur un programme qui permettra de faire une certaine tâche à plusieurs reprises. J'ai écrit le programme une fois déjà à l'aide de threads, mais maintenant, je suis tenu de le faire à l'aide de processus avec fork().
Avec les fils, je serais tout simplement de créer le nombre de threads, demandez-leur d'exécuter une fonction (la modification d'une variable en mémoire partagée), et enfin exécuter quelque chose que l'habitude de la valeur finale de la mémoire partagée.
Mais maintenant je veux faire la même chose, mais je ne suis pas sûr de la façon de le faire, car à chaque fois que je l'appel fork() pour l'essentiel, de double de lui-même. Alors, évidemment, si je l'appelle fork() dans un forloop, chaque parent et l'enfant peut passer à travers la boucle de l'appel fork() sur leur propre.
Donc ma question en un mot:
comment pourrais-je créer un nombre exact d'enfants de processus avec fork (disons que j'ai besoin de 5 enfants), et de mon processus parent attendre jusqu'à ce que ces 5 sont effectuée en cours d'exécution avant de passer?
Merci pour l'aide!
OriginalL'auteur pledgehollywood | 2013-03-10
Vous devez vous connecter pour publier un commentaire.
Je pense que cela va fonctionner:
fork()
erreurs.Cela fonctionne, sauf que vous aurez envie d'appeler waitpid 5 fois au lieu d'une seule fois. waitpid(-1) signifie attendre pour "tout" processus enfant à la sortie, pas seulement un.
Ne ce à dire que chaque enfant se poursuivra avec la boucle? Par exemple, lorsque
i
est 0, vous frayer un processus enfant, l'enfant et la mère ont tous deux boucles et les deux incrémenti
, à la foisfork
un nouveau processus enfant, vous avez maintenant 4 processus, tous les incrémenti
... etc. Peut-être que je me trompe et que j'ai besoin de café...retourne 0 dans le processus de l'enfant et le pid de l'enfant dans le processus parent. La case à
if (fork() == 0)
permet de s'assurer que le code de laif
bloc sera exécuté uniquement par les enfants. Puisqu'il n'est pasfork()
dans leif
bloc, l'enfant ne va pas créer plus de processus.Maintenant qu'il y a un
exit(0)
là ça fait toute la différence! Sans elle, le processus enfant de continuer la boucle, tout comme son parent.OriginalL'auteur niculare
Soit vous pouvez structurer vos processus, de sorte que chacun des fourches, un nombre significatif d'enfants (par exemple, le parent fourche n fois, les enfants n-1, leurs enfants, n-2, etc.), ou vous permettrait de limiter la fourche de sorte que seul le parent de garder sur la boucle (ce qui serait le cas le plus simple). Afin de rendre les enfants à la sortie de la boucle.
OriginalL'auteur hdante