Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
heheda123123 opened this issue Nov 6, 2024 · 5 comments
Open

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

heheda123123 opened this issue Nov 6, 2024 · 5 comments

Comments

@heheda123123
Copy link

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

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

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

@mutouyun
Copy link
Owner

mutouyun commented Nov 9, 2024

嗯,好,我考虑加一下

@heheda123123
Copy link
Author

heheda123123 commented Nov 11, 2024

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

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

@DeguiLiu
Copy link

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

@mutouyun
Copy link
Owner

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

@mutouyun
Copy link
Owner

mutouyun commented Dec 1, 2024

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

  • 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants