【问题标题】:Shared memory between parent and child on fork C++fork C++上的父子共享内存
【发布时间】:2015-07-22 12:01:27
【问题描述】:

我是 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

【问题讨论】:

标签: c++ memory fork shared


【解决方案1】:

并非如此。在fork之后,进程在不同的内存空间中运行,并且父进程中的var和子进程中的var之间没有任何关系。

您需要找到其他方式来传达信息。你可以让两个进程都附加到一个共享内存对象上,让子进程更新它,让父进程读取它,尽管你还必须小心竞争风险。

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

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 2012-04-26
    • 2021-01-19
    • 2010-12-30
    • 2021-12-04
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多