cpp-ipc icon indicating copy to clipboard operation
cpp-ipc copied to clipboard

是否可以提供清理共享内存的操作

Open heheda123123 opened this issue 1 year ago • 5 comments

如果程序异常退出,共享内存没有得到清理 boost的共享内存类是提供了下面的操作,可以在程序启动时执行

boost::interprocess::shared_memory_object::remove("MySharedMemory");

cpp-ipc是否可以提供类似的操作呢?

heheda123123 avatar Nov 06 '24 06:11 heheda123123

嗯,好,我考虑加一下

mutouyun avatar Nov 09 '24 07:11 mutouyun

现在我这边是rm -rf /dev/shm/__IPC_SHM__* 把路径下的共享内存都删了,但是如果有多个实例都在跑就会出问题,最好是支持只删除指定名称相关的共享内存。

假如创建了叫xx的route,我手动试过 rm /dev/shm/*xx*,貌似有点问题,是不是还有名字不带xx的公共文件在使用?

heheda123123 avatar Nov 11 '24 02:11 heheda123123

@mutouyun 附议,期望早日看到这个清理共享内存的接口

DeguiLiu avatar Nov 15 '24 12:11 DeguiLiu

emmm,改起来有点麻烦。。这周末改不完了。我下周末有事估计没时间改了,争取12月之前搞定这个功能

mutouyun avatar Nov 17 '24 09:11 mutouyun

清理接口已添加,目前带清理接口的类型有:

  • ipc::shm::handle
  • ipc::sync::condition
  • ipc::sync::mutex
  • ipc::sync::semaphore
  • ipc::chan_wrapper<Flag>

接口主要有如下几个:

  1. clear(),用于直接在一个合法对象上调用并清理对象打开时产生的共享内存文件,此接口调用完毕后对象即无效。
  2. clear_storage(char const * name) & clear_storage(prefix pref, char const * name),直接通过指定名称清理此类型对象可能产生的所有共享内存文件,此接口为静态接口,不依赖具体对象,因此调用后相关对象仅能执行release/close/open,其他行为未定义。其中带prefix的重载是ipc::chan_wrapper特有的。
  3. releaseipc::chan_wrapper新接口,为支持clear_storage调用之后相关对象的清理工作,避免对象无法正常析构。

清理示例见test_ipc.cpp中的TEST(IPC, clear),有问题请继续在这里留言。 2673453

mutouyun avatar Dec 01 '24 11:12 mutouyun