提高共享内存有效性

Boost Shared Memory validity

本文关键字:内存 有效性 共享 高共享      更新时间:2023-10-16

我正在使用Boost共享内存在进程之间共享向量。

在客户端,我怎么能,一旦我尝试打开共享内存并读取它的向量,意识到如果内存无效,或者不是我要找的。

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

同样,如果没有对共享内存段的引用,它应该被删除。然而,在我的情况下,即使客户机和服务器都关闭,并且没有其他东西正在访问共享内存,段仍然在程序数据中的Boost进程间文件夹中,并带有一些数据。因此,下次客户端启动时,它打开段没有问题,因此认为它正在访问正确的数据,而实际上没有数据要共享。

请建议。谢谢你。

从底层shm api的经验来看——而不是作为Boost专家…

要确定有效性,一种技术是确定当前进程是否是创建共享内存的进程(第一次)。您可以通过在创建(fstat)后获取大小并查看大小是否为零来实现这一点。如果它是零,这个过程正在生成它。一旦知道了这一点,就可以初始化它。此外,当您调用truncate()来设置这里的大小时,将为所有其他进程设置该大小。

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