引用计数提升进程间共享内存

时间:2017-04-28 21:33:52

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

我正在使用boost :: interprocess通过托管共享内存在进程之间共享数据。客户端可以读取或写入共享内存。

客户端首先尝试打开现有的共享内存:

managed_shared_memory(open_only, "MySharedMemory");

如果打开失败,则会创建内存:

managed_shared_memory(create_only, "MySharedMemory");

打开或创建共享内存后,客户端会增加客户端计数(存储在共享内存中的整数)

当调用客户端的析构函数时,客户端计数会减少。如果客户端计数== 0,则删除共享内存:

shared_memory_object::remove("MySharedMemory");

到目前为止一切顺利。但是,如果进程崩溃,则无法减少客户端计数,因此无法正确删除内存。

此时,新客户端可以成功打开共享内存,无论处于何种状态而不是新的默认状态。这是有问题的。

所以我的问题是。管理共享内存生命周期的最佳方法是什么?

不崩溃是一个好主意,但我正在一个插件环境中工作,我无法控制的东西可以将一切都放下来,客户端不断进出。

另一个想法是使用管道或套接字来验证客户端是否仍然有效(例如,在打开内存时ping它们,如果没有响应则手动清理)但这感觉有点过分。

0 个答案:

没有答案