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

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

最好的方法是什么?

有帮助吗?

解决方案

每个孩子都有自己的父进程的内存拷贝(至少只要它改掉修改任何东西)。如果需要共享betweeen过程需要看共享存储器或一些类似的IPC机制

顺便说一句,你为什么做这样一个社区维基 - 你可以这样做限制的响应

其他提示

2个进程不能共享相同的存储器。这是事实,一个派生的子进程将分叉后共享同一内存,而是写这个企图将导致操作系统分配一个新的可写空间,它在其他地方。

看到的 IPC 另一种形式来使用。

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

增强进程间

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

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

您可能想看看共享内存。

指针总是位于相同的处理。的它有私有的过程中,相对于处理的基地址。不同种在任何操作系统中可用的IPC机制。你可以选择Windows消息,共享内存,插座,管道等按照您的要求和数据的大小选择之一。另一种机制是使用可用的虚拟内存API编写在目标过程数据和与对应指针通知的过程。

一个简单的选择,但IPC的有限形式的,将要共享的计数工作阱是“共享的数据段”。在Windows这是使用#pragma data_seg指令实现。

请参阅此文章一个例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top