Я создал программу, которая создает 3 дочерних элементов и отправляет часть массива каждому дочернему элементу, затем каждый дочерний элемент вычисляет сумму массива и печатает его с идентификатором процесса, а затем отправляет сумму родительскому элементу, который, в свою очередь, будет добавьте значения и выведите окончательную сумму. У меня вопрос: когда я запускаю свой код, я получаю случайные дочерние и родительские выходные данные после частичного суммирования и суммирования родительских элементов.
Вот мой код:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main ()
{
pid_t child_pid[3] ;
//Define the array to hold the set of numbers
int setNum[6] = {2,3,7,-1,10,6}, sum[3] = {0, 0, 0}, j;
//Display the parents process ID
printf("I am the parent with process ID: %d \n", (int) getppid());
//Create a process
for(j=0; j<3; j++)
{
child_pid[j] = fork();
}
j=0;
if (child_pid[0] != 0)
{
//calculate the sum
for(int i=0; i<2; i++)
sum[j] = sum[j] + setNum[i];
printf("I am the child with process ID: %d and I am sending %d to my parent\n", child_pid[0], sum[j]);
j=j+1;
}
if (child_pid[1] != 0)
{
//calculate the sum
for(int i=2; i<4; i++)
sum[j] = sum[j] + setNum[i];
printf("I am the child with process ID: %d and I am sending %d to my parent\n", child_pid[1], sum[j]);
j=j+1;
}
if (child_pid[2] != 0)
{
//calculate the sum
for(int i=4; i<6; i++)
sum[j] = sum[j] + setNum[i];
printf("I am the child with process ID: %d and I am sending %d to my parent\n", child_pid[2], sum[j]);
j=j+1;
}
//Print the parent with final sum
int final_sum = sum[0] + sum[1] +sum[2];
printf("I am the parent with process ID: %d with a final sum of %d\n", (int) getppid(), final_sum);
return 0;
}