检查 Boost Interprocess managed_shared_memory 是不是已经存在? [复制]

Posted

技术标签:

【中文标题】检查 Boost Interprocess managed_shared_memory 是不是已经存在? [复制]【英文标题】:Check if Boost Interprocess managed_shared_memory already exists? [duplicate]检查 Boost Interprocess managed_shared_memory 是否已经存在? [复制] 【发布时间】:2018-05-01 09:40:11 【问题描述】:

有没有办法(除了 try-catch)来确定具有特定名称的 boost::interprocess:managed_shared_memory 区域是否已经存在?

我知道如果我在 managed_shared_memory 区域内分配一个进程间向量,我可以使用 managed_shared_memory::find() 检查它是否存在,但似乎没有办法检查 managed_shared_memory 区域本身是否存在。

【问题讨论】:

这能回答你的问题吗? Is there a better way to check for the existence of a boost shared memory segment? 【参考方案1】:

您可以将构造函数与boost::interprocess::open_or_create 一起使用。

如果您想知道两者中的哪一个发生了,您可以使用boost::interprocess::open_onlyboost::interprocess::create_only,但您需要在顶部添加“外部”同步:c++ Synchronize shared memory when reading

【讨论】:

这不是有效地建议使用 try-catch 吗?尝试使用 create_only 创建,如果失败,您知道内存不存在? 不,这是指出您可以使用的不同方法。你不必。事实上,您并没有告诉我们您认为必须这样做的原因。 哦,顺便说一句,如果您知道平台详细信息,当然可以使用该知识(例如在/dev/shm/ 下查找文件节点)。但我建议“滥用”异常处理,而不是滥用使代码不可移植的实现细节

以上是关于检查 Boost Interprocess managed_shared_memory 是不是已经存在? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Interprocess内存位置

boost::interprocess::string 转换为 char*

boost::interprocess_mutex 与进程本地 boost::mutex

boost::interprocess::interprocess_condition::wait 在等待时不会原子地解锁互斥锁

boost::interprocess::message_queue 权限被拒绝

Boost.interprocess Vector 作为类成员