5

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

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

最好的方法是什么?

4

7 回答 7

15

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

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

于 2009-03-16T15:00:02.093 回答
2

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

研究另一种形式的IPC以使用。

于 2009-03-16T15:03:00.167 回答
1

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

提升进程间

这可以让您了解如何在进程之间共享结构化数据(阅读“类”和“结构”)。

于 2009-03-17T09:54:43.147 回答
0

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

于 2009-03-16T15:01:32.323 回答
0

您可能想查看共享内存。

于 2009-03-16T15:03:45.050 回答
0

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

于 2009-03-16T15:22:21.087 回答
0

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

有关示例,请参见本文。

于 2009-03-16T15:34:33.460 回答