I have made a thread pool which writes to the same vector at the same time.
Is this implementation thread safe?
If it is not, how should I fix it?
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();
}
Update
global_var
will not be touched by any other part of the program before all threads terminated.
Assuming your global vector is not modified by any other part of code, then your code is thread safe.
Each thread is going to write (access) into a different cell of the vector, so there is no "dirty update" problem.
Moreover the vector's type is a double, in a modern architecture is bigger than a WORD-size. So each array cell is not overlapped among others.