【发布时间】:2017-05-14 06:05:38
【问题描述】:
我创建了一个线程池,它同时写入同一个向量。
这个实现线程安全吗?
如果不是,我应该如何解决?
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 不会被程序的任何其他部分触及。
【问题讨论】:
-
虽然我不想承认,但当前的 sn-p 实际上是线程安全的。 ...不过,你的设计真的很脆弱。您的代码的另一部分可能会修改
global_var,这将引入未定义的行为 -
@WhiZTiM 我保证,在所有线程终止之前,
global_var不会被程序的任何其他部分更改。 -
完整代码here以防万一。
标签: c++ multithreading thread-safety threadpool stdvector