C ++:是否可以通过分叉进程共享指针?

时间:2009-03-16 14:57:16

标签: c++ pointers fork

我有一个计数变量,应该由我分叉并由母进程使用/读取的几个进程计算。

我尝试在母进程的main()函数中创建一个指针,并在分叉的子进程中计算该指针。那不行!即使每个过程中的地址都相同,每个孩子似乎都拥有自己的副本。

最好的方法是什么?

7 个答案:

答案 0 :(得分:15)

每个子节点都有自己的父进程内存副本(至少在它尝试修改任何内容时)。如果您需要共享多个进程,则需要查看共享内存或类似的IPC机制。

顺便说一下,为什么你要把它变成一个社区维基 - 你这样做可能会限制你的反应。

答案 1 :(得分:2)

2个进程无法共享相同的内存。确实,分叉的子进程在分叉后将共享相同的底层内存,但尝试写入此操作会导致操作系统在其他位置为其分配新的可写空间。

查看要使用的另一种IPC形式。

答案 2 :(得分:1)

我的经验是,如果你想在至少两个进程之间共享信息,你几乎不想只将一些void *指针共享到内存中。你可能想看看

Boost Interprocess

可以为您提供一个想法,如何在进程之间共享结构化数据(读取“类”和“结构”)。

答案 3 :(得分:0)

不,使用IPC或线程。只共享文件描述符(但不是共享指针)。

答案 4 :(得分:0)

您可能想要查看共享内存。

答案 5 :(得分:0)

指针始终位于同一个进程中。 相对于流程的基址,它是流程专用的。在任何操作系统中都有不同类型的IPC机制。您可以选择Windows Messaging,共享内存,套接字,管道等。根据您的要求和数据大小选择一个。另一种机制是使用可用的虚拟内存API在目标进程中写入数据,并使用相应的指针通知进程。

答案 6 :(得分:0)

一个简单的选项,但有限的形式的IPC可以很好地用于共享计数是'共享数据段'。在Windows上,这是使用#pragma data_seg指令实现的。

有关示例,请参阅此article