假设我有一个二维数组和这个函数:
void addVec(std::vector<std::vector<short> >& arr, size_t idx){
arr[idx].push_back(idx);
}
std::vector<std::vector<short> > arr(2);
boost::threads th1(addVec, boost::ref(arr), 0);
boost::threads th2(addVec, booost::ref(arr), 1);
th1.join();
th2.join();
现在我应该有 arr[0][0] = 0; 和 arr[1][0] = 1; 问题是这是否安全?在内部,线程应该将值添加到向量内存的不同部分,并且因为它是在大小为 2 的开头构造的,所以只有内部向量会调整大小,因此具有线程独占访问权限。