私は同じベクトルに同時に書き込むスレッドプールを作っています。std :: vector要素への代入はスレッドセーフですか?
この実装スレッドは安全ですか?
そうでない場合は、どのように修正する必要がありますか?すべてのスレッドが終了する前に
std::vector<double> global_var;
void func1(int i)
{
global_var[i]=some_computation(i /* only depends on i */);
}
void load_distribution()
{
const int N_max=100;
global_var.assign(N_max,0.0);
std::vector<std::thread> th_pool;
for(long i=0;i<N_max;i++)
th_pool.push_back(std::thread(func1,i));
for(std::thread& tp : th_pool)
tp.join();
}
更新
global_var
は、プログラムの他の部分に触れされることはありません。
現在のスニペットは実際にはスレッドセーフです。 ...まだ、あなたのデザインは本当に壊れやすいです。定義されていない動作を導入する 'global_var'を変更する可能性のあるコード部分があるかもしれません。 – WhiZTiM
@WhiZTiM' global_var'は、すべてのスレッドが終了する前にプログラムの他の部分によって変更されないことを保証します。 – ar2015
完全なコード[ここ](http://pastebin.com/S3GYTYBf)の場合にのみ。 – ar2015