只读线程安全
答
的例子可以是一些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
很好的答案。应该指出的是,在vector上并行迭代是特别安全的 - 如果vector中只有一个迭代指针,它不会是只读的线程安全的,以执行上面的循环。 – 2010-10-29 11:24:20