在父进程中使用fork()的结果

Mob*_*oid 0 c operating-system fork matrix

我有四个矩阵,我想用fork添加它们.我必须使用fork添加前两个矩阵,然后使用其他fork添加其他两个矩阵.然后我想添加上面两个矩阵的结果,以获得所需的输出.

我使用以下代码但没有在res矩阵中得到正确的答案,

#include<stdio.h>
#include<stdlib.h>

main()
{
    int a[2][2] = {1,2, 
                4,5};
    int b[2][2] = {1,2,
                3,4};
    int x[2][2] = {2,4, 
                3,6};
    int y[2][2] = {4,6,
                2,1};
    int c[2][2];
    int z[2][2];
    int res[2][2];

    int i,j;
    int pid,pid2;   //fork

    pid = fork();
    if(pid==-1)
    {
      printf("Can't fork\n");
    }

    if(pid==0)//child
    {
        for(i=0;i<2;i++)
        {
            for(j=0;j<2;j++)    
            {
                c[i][j] = a[i][j]+b[i][j];
                printf("cccc: %d\n", c[i][j]);
            }
        }
       exit(EXIT_SUCCESS);
    }   
    if(pid>0)//parent
    {
        wait(0);
    }

    pid2=fork();
    if(pid2==-1)
    {
      printf("Can't fork\n");
    }
    if(pid2==0)//child
    {
        for(i=0;i<2;i++)
        {
            for(j=0;j<2;j++)    
            {
                z[i][j] = x[i][j]+y[i][j];
                printf("zzzz: %d\n", z[i][j]);
            }
        }
        exit(EXIT_SUCCESS);
    }

    if(pid2>0)//parent
    {
      wait(0);
    }

        printf("Result:\n");
        for(i=0;i<2;i++)
        {
            for(j=0;j<2;j++)    
            {
                res[i][j] = c[i][j]+z[i][j];
                printf("%d\t", res[i][j]);
            }
            printf("\n");
        }

}
Run Code Online (Sandbox Code Playgroud)

任何帮助plzz ..

Abh*_*sal 5

你不能简单地在这样的进程之间使用变量.每个进程都有您正在创建的这些矩阵的不同副本,并且它们不共享相同的内存空间.您将不得不使用一些IPC(进程间通信)机制来在您的进程之间进行通信.

我想在你的情况下共享内存将是更好的选择 - 请参阅使用fork()和IPC在C中最有效的矩阵乘法

因此,如果它不是作业,并且您正在尝试将此乘法并行化以用于某些应用程序.我建议使用线程而不是进程,因为线程共享相同的内存空间.请参阅线程之间共享哪些资源?并且进程和线程之间有什么区别?