Multiprocessing 独立的、分叉的进程能否联合访问动态分配的共享、指针和内存?

Multiprocessing 独立的、分叉的进程能否联合访问动态分配的共享、指针和内存?,multiprocessing,fork,unistd.h,Multiprocessing,Fork,Unistd.h,我正在尝试并行化两个简单的4x4矩阵的加法。子进程只添加奇数行,父进程添加偶数行。然而,我似乎无法让进程在共享指针内存上工作,并且输出总是分成两半,如代码下面所示: #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() { int A[4][4] = {{1,2,3,4},{6,7,8,9},{11,12,13,14},{16,17,18,19}}; int B[4

我正在尝试并行化两个简单的4x4矩阵的加法。子进程只添加奇数行,父进程添加偶数行。然而,我似乎无法让进程在共享指针内存上工作,并且输出总是分成两半,如代码下面所示:

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

int main() {
  int A[4][4] = {{1,2,3,4},{6,7,8,9},{11,12,13,14},{16,17,18,19}};
  int B[4][4] = {{1,2,3,4},{6,7,8,9},{11,12,13,14},{16,17,18,19}};
  int** C = (int**)malloc(sizeof(int)*4);
  for (int z = 0; z<4; z++) {
    C[z] = (int*)malloc(sizeof(int)*4);
  }
  pid_t cp;
  printf("Before fork\n");
  cp = fork();
  if (cp == 0) {
    for(int i = 1; i < 4; i+=2) {
      for(int j = 0; j < 4; j++) {
         printf("child process\n");
         printf("We are adding cell %d,%d\n",i,j);
         C[i][j] = A[i][j] + B[i][j];
         sleep(1);
      }
    }
  } else {
     for (int k = 0; k < 4; k+=2) {
        for(int l = 0; l < 4; l++) {
           printf("parent process\n");
           printf("We are adding cell %d,%d\n",k,l);
           C[k][l] = A[k][l] + B[k][l];
           sleep(1);
        }
     } 
  }
  sleep(10);
  printf("We are printing C here\n");
  for (int m = 0; m < 4; m++) {
      for(int n = 0; n < 4; n++) {
          printf("%d ",C[m][n]);
      }
      printf("\n");
  }
}
可能是一个
fork
复制内存,您必须为您的工作方法创建特殊的共享内存块
fork
复制内存,您必须为您的工作方法创建特殊的共享内存块。
We are printing C here
0 0 0 0 
12 14 16 18 
0 0 0 0 
32 34 36 38 
We are printing C here
2 4 6 8 
0 0 0 0 
22 24 26 28 
0 0 0 0