2D配列とこの関数があるとしましょう:
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 の先頭で構築されるため、内部ベクトルのみがサイズ変更され、スレッドの排他的アクセスが可能になります。