可以分离,分叉,进程共同访问共享动态分配,指针,内存吗?

时间:2017-08-21 20:44:10

标签: 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][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");
  }
}

这是上面代码中最终for循环的输出:

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 

0 个答案:

没有答案