提升进程间共享内存open_or_create每次都会引发异常

Boost inter process shared memory open_or_create throws exception every time

本文关键字:异常 create or 进程 共享 open 内存      更新时间:2023-10-16

我正在写入实时数据以增加共享内存。最初,每次我想访问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编写。没有例外。

我很好奇这背后的原因。

来自提升文档:

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