C++ boost进程间容器中的boost进程间错误

C++ boost进程间容器中的boost进程间错误,c++,boost,interprocess,boost-interprocess,C++,Boost,Interprocess,Boost Interprocess,我有一个boost进程间向量,其中包含字符串(boost::进程间::basic_string)作为值保存在共享内存中,从长远来看,我会遇到这个错误 include/boost/interprocess/mem\u algo/rbtree\u best\u fit.hpp:1346:void boost::interprocess::rbtree\u best\u fit::priv\u deallocate(void*)[with MutexFamily=boost::interprocess

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

include/boost/interprocess/mem\u algo/rbtree\u best\u fit.hpp:1346:void boost::interprocess::rbtree\u best\u fit::priv\u deallocate(void*)[with MutexFamily=boost::interprocess::mutex\u family;VoidPointer=boost::interprocess::offset\u ptr;long unsigned int MemAlignment=0ul]:断言
priv\u is\u allocated\u块(block)”失败`

总共有6个进程写入此向量,还有一个进程弹出数据

问题:

  • 访问共享内存的进程数量是否有任何限制,尤其是boost管理的容器
  • 据我所知,段管理器和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); 
    
    memsegment->construct(“sharedvector”)(*m_分配器);
    
    在另一个过程中,我这样做是为了访问它

    mem_segment->find<SharedVector>(t"sharedvector").first;
    
    mem_段->查找(t“sharedvector”)。首先;
    
  • 不,没有限制

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


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

    谢谢,我有一个boost进程间murex锁,我在push and pop操作中锁定。但是仍然在从属进程中,我得到了问题中指定的错误,请帮助在
    pop()
    之前检查
    empty()
    ?您是否跨
    empty()
    pop()
    持有锁?(还有:请不要这样说“请帮助”。这是不尊重的。很明显我们是来帮助的。)谢谢,我在pop之前检查size()>0,并且在这之前还有一个锁,我已经为pop编写了一个函数,该函数先锁定,然后检查大小,然后弹出数据。@LasyaLatha是时候显示代码了。让它成为一个SSCCE。我们不是通灵者。@LasyaLatha,post简短、独立、正确(可编译),例如,有关详细信息,请参阅。您可以编辑您的帖子并将其添加到那里,而不是试图在难以阅读的注释中压缩任何更长的代码。
    classSharedVector{public:boost::interprocess::interprocess_mutex mutex mutex;complex_vect_type m_vect;SharedVector(const void_allocator&a):m_vect(a){}
    对于创建,我这样做:
    memsegment->construct(“sharedvector”)(*m_分配器)mem_段->查找(t“sharedvector”)