STL ベクトルを繰り返し処理し、そこから値を読み取っています。このベクトルを変更できる別のスレッドがあります。これで、他のスレッドがベクトルに要素を挿入または削除すると、反復子が無効になります。関連するロックは使用されません。イテレータ (アプローチ 2) の代わりにインデックス (アプローチ 1) を介してコンテナにアクセスするという私の選択は、それをスレッドセーフにしますか? パフォーマンスはどうですか?
struct A{int i; int j;};
アプローチ 1:
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++;
}
アプローチ 2:
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++:
}