Créer deux processus enfant pour terminer la sum des séries impaires et paires

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 .