2012-09-05 105 views
1

我有一個parallized環和寫訪問std::map。我想在地圖的不同部分在相同的時間,即我想要訪問地圖[a]和映射並[b]爲A,B不同。當我發現這是不可能的,但我想知道,如果有一個很好的選擇或如何以不同的方式實現這一目標!std :: map線程安全的替代方案?

+2

爲什麼不使用臨界區或互斥來保護訪問的std ::地圖? – armel

+1

當你說「這不可能」時,你是什麼意思?你是怎麼弄出來的?你有可能有一個[SSCCE](http://sscce.org/)來顯示你做了什麼? –

+0

@JoachimPileborg:你不能用一個SSCCE證明UB。這個陳述在C++ 11中是合理的。 – MSalters

回答

1

我可能是錯的,但我相信,修改現有的元素添加到地圖是安全的,只要你不接觸相同的元素(因爲這不會修改地圖的基礎結構)。所以,如果你插入的時候map[a]map[b]未來,你的獨立的線程應該能夠修改這些現有的元素。

這就是說,它可能是更清潔和更安全的只是用一般的同步技術,如互斥來保護訪問地圖。

0

只要不改變下劃線map,就很可能單獨變異map[a]map[b]

如果你想同時變異的關聯容器,從PPL或TBB退房concurrent_unordered_map

0

如果可能的話,你可以嘗試給每個工人自己的地圖的副本,然後將結果進行合併。這樣就不需要鎖定了。

相關問題