2011-04-17 49 views
4

我正在編寫一個多線程服務器,它包含5或6個全局數據結構(映射,向量等),並試圖弄清楚是否需要爲某些數據保存互斥,以便從地圖讀取值或向量,或者當我要改變數據/添加新項目時只需要保持一個互斥體。是否需要鎖定STL容器才能讀取其數據?

回答

5

如果多個線程正在訪問容器並且其中至少有一個線程正在修改容器的內容,則需要同步對容器的訪問。如果沒有任何線程修改容器的內容,則不需要同步對它的訪問。

[請注意,C++語言標準沒有提及線程(至少現在還沒有),所以根本不需要容器可以從多個線程使用。也就是說,我上面所說的至少對於標準庫的所有主要實現都是正確的,並且是即將發佈的C++語言標準的C++ 0x修訂版中的要求。]

相關問題