2015-06-17 61 views
0

我讀過std::map不是線程安全的。因此,如果我從不同的線程訪問(讀/寫)std::map,我應該簡單地將相關代碼包裝在關鍵部分中嗎?從不同線程訪問std :: map

注:我使用Visual C++ 2010

+0

根據您針對[Slim Reader/Writer鎖定]的平臺(https://msdn.microsoft.com/en-us/library/windows/desktop/aa904937(v = vs.85).aspx)可能更合意,因爲它允許多個線程同時讀取。 –

回答

1

答案很簡單:是的。但如何正確做到這一點可能會很棘手。基本策略是在關鍵部分中打電話給您的map,包括包裝迭代器的生命週期。

但是,您還需要確保您的應用程序對地圖的假設也得到了仔細處理。例如,如果您需要從地圖中刪除許多相關項目,請確保其他線程僅允許缺少某些項目,或將整個批處理操作包裝在critsec中。這可能很容易失控,所以最終會在關鍵部分包含大量代碼,最終導致死鎖和性能下降。小心!

0

同一個問題剛剛得到了write。底線:使用讀/寫鎖。