在子进程之间共享指针

Share pointer between subprocesses

本文关键字:指针 共享 之间 子进程      更新时间:2023-10-16

我有一个64位应用程序,它通过popen2实现创建了2个子进程(32位)。

我需要两个子进程访问内存中的同一个对象,我不知道如何做到这一点。

如果我理解正确的话,每个子进程都有一个不同的内存映射,因此我不能在两个子进程之间传递内存地址。

附加信息:目标平台是Mac ,但我正在寻找一个尽可能与平台无关的答案 Mac特定的答案很好,我可能不会在其他平台上使用这种方法。我只是对使用线程了解不够;我选择这条路线是因为子进程必须是32位的。

可以使用共享内存概念。这意味着,你分配(使用操作系统服务)一个内存,这将是可见的两个子进程。

根据wiki的建议,您可以使用boost.interprocess在平台无关的级别上使用共享内存。

这是个难题。

你是正确的,每个进程都有自己的地址空间。一个进程创建的对象不能被另一个进程访问。

可以使用共享内存,并将对象放在那里。一个复杂的情况是,通常共享内存段将以不同的地址映射到每个进程的地址空间。这意味着你不能在那些对象中使用指针。这可以通过使用索引而不是指针来缓解。

此外,如果进程A是32位,进程B是64位,则原语类型(如long)可以具有不同的宽度。因此,在这种情况下共享数据时,您需要使用固定宽度类型,如int32_t

最后一个复杂的问题是同步:如果一个进程可以在另一个进程读取或修改对象时修改它,则需要引入进程间同步。