2010-10-29 205 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