取消映射提升共享内存
Posted
技术标签:
【中文标题】取消映射提升共享内存【英文标题】:Unmapping boost shared memory 【发布时间】:2015-03-09 08:15:53 【问题描述】:我有一个代码,其中一个写入者和多个读取者使用了 boost 共享内存。
写入者创建共享内存,以写入权限打开它,并时不时向其中写入数据。
Reader 总是来来去去,每个 Reader 都以 read_only 权限映射到共享内存,做它该做的事情,然后调用 remove。
问题似乎是当读者完成它正在做的事情时。它调用remove,但是remove会删除新读者的shared_memory文件,他们无法映射到它。
我的问题是,一个进程如何从共享内存中分离,而不删除它? boost 库中似乎没有分离功能。
【问题讨论】:
您能否提供更多您正在使用的女巫库的详细信息。那是 boost.interprocess 吗? 确实如此。可能是 Boost Interprocess 或 Boost iostreams #include您应该能够使用共享引用计数。
实现此目的的共享指针或信号量。
对于 Boost Interprocess,关闭不会删除映射/共享对象。只是不要调用 remove。
【讨论】:
如何关闭?据我所知,没有关闭 API 调用,只删除导致我的问题的原因。一旦我在阅读器客户端中完成映射共享内存,我不希望留下它。 当shared_memory_object
、managed_shared_memory
或managed_mapped_file
超出范围时,它会被关闭。真的就像std::fstream
一样。这是 C++ :)
但是当它关闭时是进程级别上未映射的内存,我知道该对象可能会超出范围,但是如果共享内存仍然在有问题的进程中映射 - 以及我试图避免。
好的。那将是资源泄漏,您会将其报告为错误。提示:不,这不会发生。是的:共享记忆会一直存在,直到被删除。不,如果没有您的要求,它不会保持映射以上是关于取消映射提升共享内存的主要内容,如果未能解决你的问题,请参考以下文章