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