【问题标题】:Boost Shared Memory : the volume of a file has been externally altered and open file is not longer validBoost Shared Memory:文件的卷已被外部更改,打开的文件不再有效
【发布时间】:2015-05-08 10:58:18
【问题描述】:

我正在使用 Boost shared memory 在不同进程之间共享向量。但是,在某些情况下,共享内存的使用者会抛出此异常:

意外异常:文件的卷已被外部更改,因此打开的文件不再有效。

我设置了适当的Synchronization 机制。这个错误说明了什么?


已解决其中一个进程在创建时未正确分配内存大小。

创建共享内存对象时,其大小为0。要设置共享内存的大小,用户必须在已以读写属性打开的共享内存中使用truncate函数调用

来源 - Boost shared memory

【问题讨论】:

    标签: c++ boost vector shared-memory


    【解决方案1】:

    这意味着文件的卷已被外部更改。寻找其他写入文件的进程。

    换句话说,这意味着您没有适当的同步。

    您是否使用bip::managed_mapped_file::grow 进行任何更改?文档指出它只允许离线增长。

    【讨论】:

    • 我没用过bip::managed_mapped_file::grow。只有一个进程实际写入共享内存,另一个只是读取它,Boost Mutex 应用于读取和写入部分。
    • 你能告诉我们你做了什么吗? “Boost Mutex”不是一个事物。此外,仅序列化关键部分的前提是您知道关键部分是什么。重要的是,这应该包括打开/创建映射。如果您需要更多帮助,是时候提供SSCCE
    • 原来,在一个场景中,几个进程中的一个是第一个创建内存的,内存大小还没有分配,因此它被创建为大小为0,其余的跟随。
    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多