2011-08-09 44 views
2

我已经实现了一个简单的共享memeory代码,它分散在两个进程中(1行为编写器和其他作为阅读器的行为)。但是我想管理这个SHM代码(就像内存管理器),它独立于任何读写器进程工作。通过简单地给一些钩子/指针在外面,任何人都可以为我提供一个方法。或有关相关信息的相关代码或链接?还有一个我可以使用Zygote进程来实现它吗?请建议?在C++中实现共享内存管理器

+0

什么是Zygote进程?如果这是在特定操作系统上进行的处理,请使用该操作系统的适当标记来标记问题。 –

+0

事实上,请标记您的问题与您正在使用的共享内存的操作系统或可移植实现,因为C++标准不提供共享内存实现。 –

回答

5

应用程序无法在现代操作系统上使用普通指针“共享”其内存。这需要操作系统的帮助,并且高度依赖于所讨论的操作系统。例如,在Linux上最好的选择是使用SysV共享内存。

确保您了解多进程共享内存的开销,并问自己是否仅使用线程是不够的。在大多数情况下,线程就足够了,否则你应该重新认为你的模型使用消息传递/共享模型。

+0

是的,它只与Linux操作系统相关的问题。但在我的应该有两个独立的进程,其中一个充当守护进程将数据写入SHM。但我不想将SHM代码保存到守护进程中。 – Chandra

+3

我强烈反对SysV共享内存。 POSIX共享内存(在/ dev/shm中创建一个文件,这应该是内存支持的文件系统)并将其映射为Linux上的首选方法。它的接口更简单,冲突的可能性更低(因为它是通过与SysV IPC的整数相比的字符串来命名的),并且如果在打开它之后取消链接文件(对于SysV IPC,您无法执行任何类似操作),您可以确保内核将其清除。 –

+1

进程间POSIX共享内存的开销与线程相比非常小。唯一的区别是,在进程之间切换时,页面表需要重新加载,而线程共享相同的内容,因此在那里不需要。另一方面,流程更容易处理。 –