增强进程间进程容器中的进程间错误

我有一个包含字符串(boost :: interprocess :: basic_string)的boost进程间向量作为保存在共享内存中的值,我长期得到这个错误

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 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)'failed .`

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

问题:

  • 访问共享内存的进程数是否有限制,尤其是提升受管容器。
  • 我的理解是段管理器和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;
    

  • 不,没有限制

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

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

    链接地址: http://www.djcxy.com/p/50973.html

    上一篇: boost interprocess error in boost interprocess containers

    下一篇: Is it safe to use boost::optional in interprocess memory?