c++ - boost::interprocess 共享内存open_or_create每次都抛出异常

标签 c++ boost shared-memory

我正在编写实时数据以增加共享内存。最初我每次想访问 shm 时都使用它:

boost::interprocess::managed_shared_memory  segment(boost::interprocess::open_or_create, "MySharedMemory",20000000);

在 Debug模式下我发现这个调用总是抛出这个异常:

First-chance exception at 0x00007FFA30BB95FC in testerud.exe: Microsoft C++ exception: boost::interprocess::interprocess_exception at memory location 0x000000000550E1C0.

但我能够打开并将我的数据推送到共享内存。我找到了解决这个问题的方法。我创建了另一个函数只是为了在进程开始时 open_or create 然后每次都使用 open_only 来编写。也不异常(exception)。

我很好奇这背后的原因。

最佳答案

来自 boost 文档:

托管内存段还提供了迭代构造的命名和唯一对象以进行调试的可能性。 注意:此迭代不是线程安全的,因此用户应确保没有其他线程正在操作段中的命名或唯一索引(创建、删除、保留...)。其他不涉及索引的操作可以并发执行(例如原始内存分配/释放)。

关于c++ - boost::interprocess 共享内存open_or_create每次都抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45882433/

相关文章:

c++ - 为什么在删除原子引用计数智能指针中的数据之前需要获取屏障?

executable - 共享可执行内存

c++ - 命名空间范围内的 constexpr 变量,有和没有显式内联定义

c++ - 以参数为类指针的虚函数

c++ - 我可以用 bind1st/2nd 替换 boost::bind 吗?

c++ - 生成时CMake错误。项目使用Boost库

c++ - 具有通用引用的过载解决方案

c++ - 创建自定义 end() 迭代器

c++ - 在编译期间 boost undefined reference

C++ WIN32 在共享内存中创建整数和 bool 数组