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

标签 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

最佳答案

不是那样的。 fork 后,进程在不同的内存空间中运行,父进程中的 var 和子进程中的 var 之间没有关系。

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

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

关于c++ - fork C++ 上父子之间的共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31562514/

相关文章:

macos - 为什么我不能在不同的 fork 进程中使用 cocoa 框架?

C 并发进程和管道

c++ - 在没有 extern "C"的情况下从 dll 导出 C++ 函数

C++ STL - 为什么使用 !(w < *i) 而不是 (w==*i)

ios - SpriteKit SKTextureAtlas,在加载纹理时由于内存压力而终止

javascript - 在同级元素的单击事件中从内存中删除 Image() 对象 — JavaScript

为进程创建 n 个子进程

c++ - 显式模板化强制转换运算符上的enable_if给出 "invalid static_cast"

c++ - 根据运行时决策组合不同的迭代器

c++ - 当您不知道确切的元素数量但可以估计上限时,分配比数组所需更多的内存是否可以?