fork C ++上父和子之间的共享内存

时间:2015-07-22 12:01:27

标签: c++ memory fork shared

我是C ++的新手。是否可以在fork()?

中声明父进程和子进程之间共享使用的变量
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

int var;

int main(int argc, char * argv[])
{       
    pid_t child_pid;
    int status;

    var = 3;

    if ((child_pid = fork()) < 0) {
        perror("Error (fork failure)");
    }   

    if (child_pid == 0) {
      var = 10;
      cout << "CHILD ASSIGNED var=" << var << endl;
    }    
    else {        
        wait(NULL);
        cout << "PARENT var=" << var << endl;
    }                        
}

我得到的当前结果是:

CHILD ASSIGNED var=10
PARENT var=3

我想要的是

PARENT var=10

1 个答案:

答案 0 :(得分:2)

不喜欢它不是。在fork之后,进程在不同的内存空间中运行,父进程中的var与子进程中的var之间没有任何关系。

您需要找到一些其他方式来传达信息。您可以将两个进程附加到共享内存对象,并让子进程更新,并让父进程读取它,尽管您还必须注意种族危险。

或者,您可以考虑使用线程,在这种情况下,两个进程都使用相同的内存,但同步也是一个问题。