提高共享内存的有效性

时间:2014-03-12 05:45:05

标签: c++ memory boost ipc boost-interprocess

我正在使用Boost共享内存来跨进程共享一个向量。

在客户端,一旦我尝试打开共享内存并从中读取一个向量,我怎么能意识到内存是否无效,或者不是我正在寻找的内容。

如果内存段不存在,Open_Only是否会失败,如果存在,我该如何捕获此失败?

此外,如果没有对它的引用,则应该删除共享内存段。但是,在我的情况下,即使客户端和服务器都关闭,并且没有其他任何东西正在访问共享内存,该段仍保留在程序数据中的Boost Interprocess文件夹中,包含一些数据。因此,下次客户端启动时,打开该段没有问题,因此认为它正在访问正确的数据,而事实上,没有数据可以共享。

请告知。谢谢。

1 个答案:

答案 0 :(得分:0)

从基础shm api的经验谈起 - 而不是作为Boost专家......

要确定有效性,一种技术是确定当前进程是否是创建共享内存的进程(第一次)。您可以通过在创建(fstat)之后获取大小并查看大小是否为零来执行此操作。如果它为零,则该过程正在创建它。一旦你知道你可以初始化它。此外,当您调用truncate()在此处设置大小时,将为所有其他进程设置该大小。

要确保删除,可以调用shm_unlink()从系统中删除共享内存文件。我相信Boost有一个remove()api可以做到这一点。