2015-06-27 72 views
0

我具有包含在长期运行的字符串(升压::进程间:: 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)'failed.`

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

问题:

  1. 是否有过程的数目的任何限制访问的共享存储器,尤其是助推管理容器。
  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; 
+0

'class SharedVector { public: boost :: interprocess :: interprocess_mutex mutex; complex_vect_type m_vect; SharedVector(常量void_allocator&A):m_vect的(a){} }' 和用于创建要这么做: 'memsegment->构建( “sharedvector”)(* m_allocator);' 而在另一进程正在执行此操作来访问它 'mem_segment-> find (t“sharedvector”)。 ' –

回答

0
  1. 不存在是没有限制

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

多进程访问共享资源并发需要与多线程相同的访问同步量。当然不同之处在于你使用进程间同步对象

+0

谢谢,我有一个提升进程间murex锁,并锁定推送和弹出操作。但仍然在从属进程中,我得到了问题中指定的错误,请帮助 –

+0

在pop()之前检查'empty()'吗?你是否持有'empty()'和'pop()'锁? (并且:请不要在**上“请帮助”**,这是不尊重的,我们很乐意帮助)。 – sehe

+0

谢谢,我在弹出之前检查size()> 0,并且在此之前还有一个锁,我已经为pop弹出了一个函数,然后锁定然后检查大小,然后弹出数据。 –