每次都会增加进程间共享内存open_or_create抛出异常

时间:2017-08-25 13:21:12

标签: c++ boost shared-memory

我正在编写实时数据来提升共享内存。最初我每次想要访问shm时都使用它:

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

在调试模式下,我发现此调用总是抛出此异常:

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

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

我很好奇这背后的原因。

1 个答案:

答案 0 :(得分:1)

来自提升文档:

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