【问题标题】:Does a std::vector created with managed_shared_object require synchronization?使用 managed_shared_object 创建的 std::vector 是否需要同步?
【发布时间】:2014-08-04 12:35:09
【问题描述】:

我成功编译了来自 Boost 的 Creating vectors in shared memory 示例。我不确定从多个进程插入构造的向量是否安全(自动同步实习生)。文档中提到了Synchronization guarantees,但这只是指共享内存的创建/搜索/销毁。

你知道我是否必须手动同步向量访问(插入、删除、迭代),例如scoped_lock<named_mutex>?

【问题讨论】:

    标签: c++ boost shared-memory interprocess


    【解决方案1】:

    您创建的对象是std::vector,因此boost 不能向标准库类添加任何同步。就像任何其他 std::vector 一样,您必须手动同步它。

    【讨论】:

    • 这是我第一次处理共享内存,但不确定幕后是否发生了某些事情(尤其是生成向量的ShmemAllocator)。谢谢你的澄清。
    • 确实有——分配器本身是同步的,所以不同的进程可以从同一个段进行分配。它只是不能帮助你解决上面的容器级语义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2019-09-07
    • 2016-04-20
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多