【发布时间】:2017-08-05 18:44:53
【问题描述】:
我正在尝试在 C 中使用 fork 进行计算。 我有一个包含成员 {1,2,3,4} 的二维数组,我有一个函数可以为数组中的每个成员获取平方。我将使用子进程调用此函数。 例如对于 3 个子进程输出将是这样的;
1.Child
1 4
9 16
----------
2.Child
1 16
81 256
----------
3.Child
1 256
6561 65536
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int matrix[2][2] = {1, 2, 3 ,4 } ;
int main(){
forkFork(3);
}
void forkFork(int counter)
{
pid_t pid;
if(counter == 0)
{
exit(0);
}
if(counter > 0)
{
if ((pid = fork()) < 0)
{
perror("fork error :(");
}
else if (pid == 0)
{
matrixPower(matrix);
print(matrix);
}
else if(pid > 0)
{
forkFork(counter - 1);
}
}
}
void matrixPower(int m[2][2])
{
int i,j,k;
int result = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
{
result = matrix[i][j]*matrix[i][j];
m[i][j] = result;
result = 0;
}
}
}
void print(int a[2][2])
{
int row, col ;
for( row = 0; row < 2; row++ )
{
for( col = 0; col < 2 ; col++ )
{
printf("%d\t", a[row][col]);
}
puts("");
}
printf("-------------------------------\n");
}
我找不到将新数组传递给递归函数的方法...
【问题讨论】:
-
将数组作为参数通过
forkFork函数有什么问题? -
它没有传递新值;例如,在第一次调用 forkFork 时,矩阵数组更改为 {1,4,9,16} 在第二次进程调用(使用递归)中,我试图将 {1,4,9,16} 传递给 forkFork 函数,但它的使用旧值 {1,2,3,4}
-
我发现了问题并在下面提供了解决方案。
-
你是否故意让你的程序尽可能低效?如果没有,请忘记 fork 并忘记递归。
标签: c recursion multidimensional-array