2010-04-13 88 views

回答

3
  1. 容器數據結構幾乎總是需要同步(例如mutex),以防止race conditions。由於線程不受C++標準(C++ 0x前)支持,因此無法將這些線程添加到STL中。而且,對於不需要的情況,同步非常昂貴。只要手動執行此同步,STL容器可用於多線程應用程序。或者,您可以創建自己的線程安全容器,這些容器與STL算法(如this thread-safe circular queue)兼容。
  2. A vector包含一個連續的內存塊。所以,一旦找到指向這個內存塊的指針,它可以像普通數組一樣顯示。確切的細節取決於你使用的STL實現。
1

STL不是線程安全的,因爲很多人不需要線程安全,並且因爲它將線程上下文引入類中,否則不需要知道線程概念的任何內容。

您可以封裝進入容器,並提供自己的線程安全(或您的具體設計和實現施加其他限制。)

1
  1. 因爲還有單線程程序。
  2. 看一看here
3

標準的C++容器不是線程安全的,因爲你很可能實際上想要的不僅僅是容器本身的更高級別的鎖定。換句話說,你可能希望兩個或更多的操作一起安全。

例如,如果您在運行多線程:

v.push_back(0); 
v.push_back(1); 

不會得到交替的0和1的一個很好的載體,可以把它們混亂。你需要鎖定兩個命令才能得到你想要的。