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 ..
你不能简单地在这样的进程之间使用变量.每个进程都有您正在创建的这些矩阵的不同副本,并且它们不共享相同的内存空间.您将不得不使用一些IPC(进程间通信)机制来在您的进程之间进行通信.
我想在你的情况下共享内存将是更好的选择 - 请参阅使用fork()和IPC在C中最有效的矩阵乘法
因此,如果它不是作业,并且您正在尝试将此乘法并行化以用于某些应用程序.我建议使用线程而不是进程,因为线程共享相同的内存空间.请参阅线程之间共享哪些资源?并且进程和线程之间有什么区别?