题
我有一个计数变量,应该由我分叉并由母进程使用/读取的几个进程进行计数。
我尝试在母进程的 main() 函数中创建一个指针,并在分叉的子进程中向上计数该指针。那不行!尽管每个进程中的地址都是相同的,但每个孩子似乎都有自己的副本。
最好的方法是什么?
解决方案
每个孩子都有自己的父进程的内存拷贝(至少只要它改掉修改任何东西)。如果需要共享betweeen过程需要看共享存储器或一些类似的IPC机制
顺便说一句,你为什么做这样一个社区维基 - 你可以这样做限制的响应
其他提示
2个进程不能共享相同的存储器。这是事实,一个派生的子进程将分叉后共享同一内存,而是写这个企图将导致操作系统分配一个新的可写空间,它在其他地方。
看到的 IPC 另一种形式来使用。
没有,使用IPC或线程。仅文件描述符被共享(但不是查找指针)。
您可能想看看共享内存。
指针总是位于相同的处理。的它有私有的过程中,相对于处理的基地址。强>不同种在任何操作系统中可用的IPC机制。你可以选择Windows消息,共享内存,插座,管道等按照您的要求和数据的大小选择之一。另一种机制是使用可用的虚拟内存API编写在目标过程数据和与对应指针通知的过程。
一个简单的选择,但IPC的有限形式的,将要共享的计数工作阱是“共享的数据段”。在Windows这是使用#pragma data_seg
指令实现。
请参阅此文章一个例子。
不隶属于 StackOverflow