【问题标题】:boost interprocess error in boost interprocess containersboost进程间容器中的进程间错误
【发布时间】:2015-09-14 11:02:34
【问题描述】:

我有一个 boost 进程间向量,其中包含字符串 (boost::interprocess::basic_string) 作为保存在共享内存中的值,从长远来看,我会收到此错误

include/boost/interprocess/mem_algo/rbtree_best_fit.hpp:1346: void boost::interprocess::rbtree_best_fit<MutexFamily, VoidMutex, MemAlignment>::priv_deallocate(void*) [with MutexFamily = boost::interprocess::mutex_family; VoidPointer = boost::interprocess::offset_ptr<void>; long unsigned int MemAlignment = 0ul]: Assertionpriv_is_allocated_block(block)' 失败。`

共有 6 个进程写入该向量,一个进程弹出数据。

问题:

  1. 访问共享内存的进程数量是否有任何限制,尤其是 boost 托管容器。
  2. 我的理解是段管理器和mem算法是保存在共享内存中的,对吗?

我使用这个类:

class SharedVector {
public:
    boost::interprocess::interprocess_mutex mutex;
    complex_vect_type m_vect;
    SharedVector(const void_allocator &a) : m_vect(a) {}
};

为了创造,我正在这样做:

memsegment->construct<SharedVector>("sharedvector") (*m_allocator); 

并且在另一个进程中这样做是为了访问它

mem_segment->find<SharedVector>(t"sharedvector").first;

【问题讨论】:

  • class SharedVector { public: boost::interprocess::interprocess_mutex mutex; complex_vect_type m_vect; SharedVector(const void_allocator &amp;a) : m_vect(a) { } } 并且为了创建我正在这样做:memsegment-&gt;construct&lt;SharedVector&gt;("sharedvector") (*m_allocator); 并且在另一个过程中我正在这样做以访问它mem_segment-&gt;find&lt;SharedVector&gt;(t"sharedvector").first;

标签: c++ boost interprocess boost-interprocess


【解决方案1】:
  1. 不,没有限制

  2. 是的

你没有提到任何锁定。我想这解释了你的问题。

多个进程同时访问共享资源需要与多个线程相同数量的访问同步。当然,不同之处在于您使用进程间同步对象

【讨论】:

  • 谢谢,我有一个 boost 进程间 murex 锁,并且正在锁定推送和弹出操作。但是仍然在从属进程中我得到了问题中指定的错误,请帮助
  • pop() 之前检查empty() 吗?您是否在empty()pop() 之间持有锁? (并且:请不要在 SO 上“请帮助”。这是不尊重的。很明显我们是来帮忙的)。
  • 谢谢,我确实在 pop 之前检查 size() > 0 并且在此之前也有一个锁,我已经为 pop 编写了一个函数,它锁定然后检查大小然后将数据弹出。
  • @LasyaLatha 是时候显示代码了。使其成为 SSCCE。我们不是通灵者。
  • @LasyaLatha,发布简短、独立、正确(可编译)、示例,详情请参阅this。您可以编辑您的帖子并将其添加到那里,而不是尝试在难以阅读的 cmets 中压缩任何更长的代码。
猜你喜欢
  • 2014-12-04
  • 2021-05-25
  • 2019-03-08
  • 1970-01-01
  • 2011-03-07
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多