在boost进程间容器中增加进程间错误

时间:2015-06-27 16:36:50

标签: c++ boost interprocess boost-interprocess

我有一个提升进程间向量,其中包含字符串(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]: Assertion priv_is_allocated_block(block)'失败。

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

问题:

  1. 访问共享内存的进程数量是否有任何限制,尤其是提升托管容器。
  2. 我的理解是段管理器和mem算法本身保存在共享内存中,是否正确?
  3. 我使用这个类:

    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;
    

1 个答案:

答案 0 :(得分:0)

  1. 没有限制

  2. 你没有提到任何锁定。我想这可以解释你的问题。

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