2015-06-27 85 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彈出了一個函數,然後鎖定然後檢查大小,然後彈出數據。 –