C++/Linux,在应用程序之间共享内存中的对象

use*_*171 0 c++ vector shared-memory

我有一个应用程序生成相当多的数据,我希望它可供另一个C++应用程序访问.平台是RHEL5,g ++如果重要的话.

以前,我这样做的方法是将数据写入/ dev/shm(基本上是一个linux内存驱动器),然后让另一个应用程序从那里读取它.

然而,这似乎是非常低效的,因为有一个流,然后是一个ifstream,并将数据重新加载到内存中.此外,将数据作为文本文件存储在内存中似乎需要更多的空间而不仅仅是将其保存为内存(尽管我不是100%确定这是真的).

我要分享的数据是以.的形式

vector< vector<struct> > mydata;
Run Code Online (Sandbox Code Playgroud)

我希望其他应用程序能够做类似的事情

mydata.at(ii).back()
Run Code Online (Sandbox Code Playgroud)

检索它需要的数据.实际上mydata中会有相当多的数据.如果我要将它打印成CSV格式文件,它可能是10GB.我正在处理的服务器有24GB的内存,应该足以处理这个问题.

此外,当第一个应用程序在mydata中添加更多条目时,会发生这种检索(因此可能存在潜在的竞争条件?).

在C++中有没有办法共享vector <vector> mydata; 两个申请之间?如果是这样,最好的实现是什么?如果可能的话,我宁愿避免使用第三方库.

Kev*_*son 6

您可能更愿意避免使用第三方库,但最好的快速解决方案就在那里.试试Boost.Interprocess.它提供共享内存安全容器(如矢量)以及易于使用的界面.它也是仅限标头的库之一,这使得它比其他几个库更容易集成.

有关最新版本的文档,请参阅此处的链接:http://www.boost.org/doc/libs/1_53_0/doc/html/interprocess.html

那里也有很多例子.它应该能够让您快速了解它的功能.