Pour l’entrée de n = 10
, je reçois une sortie étrange:
pid = 31456 Sum of Odd series : 25 pid = 31456 Sum of Even series : 30 pid = 31456
Code
#include #include #include #include int main() { pid_t child_pid; int i, j, k, n; int sum; //printf("Enter the last number of series : "); scanf("%d", &n); printf("pid = %d\n", getpid()); for(i = 0; i < 2; i++) { child_pid = fork(); if (child_pid < 0) { printf("Failed to create child process . . ."); return 1; } else if (child_pid == 0) { if (i == 0) //find the sum of odd series { sum = 0; for(j = 1; j <= n; j += 2) sum += j; printf("Sum of Odd series : %d\n", sum); exit(0); } else if (i == 1) //find the sum of even series { sum = 0; for(j = 2; j <= n; j += 2) sum += j; printf("Sum of Even series : %d\n", sum); exit(0); } } else { wait(&child_pid); } } return 0; }
Lien Ideone : ideone.com/TyIkJa
Vous devrez changer votre code comme ci-dessous.
if (childs[i] == 0) { if (i == 0) //find the sum of odd series { for(j = 1; j <= n; j += 2) sum += j; printf("Sum of odd series : %d\n", sum); exit(0); } else if (i == 1) //find the sum of even series { for(k = 2; k <= n; k += 2) sum += k; printf("Sum of even series : %d\n", sum); exit(0); } else { wait(&childs[i]); }
La raison en est que les enfants et les parents ont leurs propres copies de la sum. Ainsi, lorsque vous terminez, le parent a toujours sum = 0, mais ces valeurs sont mises à jour pour "sum" de child1 et "sum" de child2.
Lorsque vous générez un processus, alors parent et child sont initialement des copies plus ou moins exactes, y compris les valeurs des variables, à l’exception du code retour de fork ().
Mais le mot clé est des copies. Ces deux processus sont maintenant indépendants et les variables “globales” ou non * ne sont en aucun cas connectées .