Распараллеливание программы при помощи fork()

Здравствйуйте! Задача найти строку с минимальной суммой элементов массива в родительском процессе, а столбец с минимальной суммой при помощи n дочерних процессов. Программа работает, если не использовать fork(), но как только я оборачиваю цикл в fork(), программа возвращает неверно посчитанную минимальную сумму стобца.

#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <sys/wait.h>

int main(int argc, char *argv[]) {
    int n, k;
    int sum_C;
    int min_C = 0;
    int sum_R;
    int min_R = 0;

    int fd[2];
    printf("Input n: ");
    scanf("%d", &n);
    printf("Input k: ");
    scanf("%d", &k);
    printf("\nNumber of rows: n = %i\nNumber of columns: k = %i\n", n, k);
    int a[n][k];


    if (pipe(fd) < 0)
    {
        printf("\nError of channel creation\n");
        return 0;
    }

    printf("\nMatrix A:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            a[i][j] = rand()%10;
            write(fd[1], &a[i][j], sizeof(int));
        }
    }
    printf("\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            read(fd[0], &a[i][j], sizeof(int));
            printf("%i ", a[i][j]);
        }
        printf("\n");
    }
    for (int i = 0; i < n; i++) {
        sum_R = 0;
        for (int j = 0; j < k; j++) {


                    sum_R += a[i][j];


        }
        if (i == 0 || sum_R < min_R) {
            min_R = sum_R;

        }
    }
    for (int i = 0; i < n; i++) {
       if (fork() == 0) {
           sum_C = 0;
           for (int j = 0; j < k; j++) {
               sum_C += a[j][i];
           }
           if (i == 0 || sum_C < min_C) {
               min_C = sum_C;
           }
           wait(0);
           return 1;
       }
        }
        
       

        printf("\nColumn sum: = %i\n", min_C);
        printf("\nRow sum: = %i\n", min_R);
        close(fd[0]);
        close(fd[1]);
        return 0;
    }

Ответы (0 шт):