2010-10-29 68 views

回答

2

的例子可以是一些STL容器,這樣

std::vector<int> vec; 
vec.push_back(1); 
vec.push_back(2); 

初始化如果未改性,這vec可以由幾個線程訪問它的領域中使用。這是安全,而vec成員沒有改變,也沒有佔用的內存。

int n = vec.at(0);// good. many threads can do this 
// many threads could do this too 
for(std::vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it) 
{ 
    cout << *it << endl; 
} 

不安全但如果其他線程做了一些vec寫/修改,而​​有人讀它。

vec.push_back(3); // bad: vec could get expanded and the data relocated 
vec[ 0 ] = 5; // bad: someone could read invalid data 
+1

很好的答案。應該指出的是,在vector上並行迭代是特別安全的 - 如果vector中只有一個迭代指針,它不會是隻讀的線程安全的,以執行上面的循環。 – 2010-10-29 11:24:20