我正在迭代一个 STL 向量并从中读取值。还有另一个线程可以更改此向量。现在,如果其他线程从向量中插入或删除元素,它会使迭代器无效。没有使用涉及的锁。我选择通过索引(方法 1)代替迭代器(方法 2)访问容器是否使其线程安全?性能呢?
struct A{int i; int j;};
方法一:
size_t s = v.size();//v contains pointers to objects of type A
for(size_t i = 0; i < s; ++i)
{
A* ptr = v[i];
ptr->i++;
}
方法二:
std::vector<A*>::iterator begin = v.begin();
std::vector<A*>::iterator end = v.end();
for(std::vector<A*>::iterator it = begin; it != end; ++it)
{
A* ptr = *it;
ptr->i++:
}