取消映射提升共享内存

Unmapping boost shared memory

我有一个代码,其中 boost 共享内存由单个编写器和许多 readers 使用。

writer创建共享内存,以写权限打开,时不时向其中写入数据。

读者一直来来去去,每个 reader 映射到具有 read_only 权限的共享内存,做它做的事情,而不是调用 remove。

问题似乎是当 reader 完成它正在做的事情时。它调用 remove,但是,remove 会删除新 reader 的 shared_memory 文件,它们无法映射到它。

我的问题是,进程如何从共享内存中分离出来而不删除它? boost 库中似乎没有分离功能。

您应该可以使用共享引用计数。

实现此目的的共享共享指针或信号量。

对于 Boost Interprocess,关闭 不会 删除 mapping/shared 对象。只是不要调用 remove.