J'ai créé un pool de threads qui écrit sur le même vecteur en même temps.L'affectation à un élément std :: vector thread-safe?
Ce fil d'implémentation est-il sécuritaire?
Si ce n'est pas le cas, comment dois-je le réparer?
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();
}
Mise à jour
global_var
ne seront pas touchés par toute autre partie du programme avant que toutes les discussions terminées.
Bien que je déteste admettre, l'extrait courant est réellement thread-safe. ... Pourtant, votre design est vraiment fragile. Il peut y avoir une autre partie de votre code qui peut modifier 'global_var' qui introduira un comportement indéterminé. – WhiZTiM
@WhiZTiM Je garantis que' global_var' ne sera pas modifié par une autre partie du programme avant que tous les threads ne se terminent. – ar2015
le code complet [ici] (http://pastebin.com/S3GYTYBf) pour juste au cas où. – ar2015