2013-01-16 118 views
1

的std ::地圖併發我有一個線程(線程A),它在地圖不斷迭代說MAPA。一個插入線程,一個讀線程

現在有一個其他線程(ThreadB),其插入元件進入MAPA。

我不刪除地圖

元素會不會有此操作任何併發問題?

+0

我不關心無效迭代,因爲我不斷循環,如果我到達地圖的最後,我重新迭代begining。 – sri

+0

你應該擔心。當迭代器無效時,您可能永遠無法在地圖末尾對其進行測試,因爲運算符「++」或「 - 」會做出不可預測的事情。 – Benoit

回答

3

有線程安全/併發問題和插入新項目時無效迭代器之間的區別。

STL本質上不是線程安全的,所以在執行任何操作時都要確保互斥鎖,而不僅僅是從多線程讀取STL對象。

然而,插入到std::map並不否定現有的迭代器(見Does insertion to STL map invalidate other existing iterator?

+0

謝謝sonicwave和Benoit – sri