Du fait partie de this question n'a pas été abordée, je fais une autre question:Synchronisation après la fin du fil
#include<iostream>
#include<thread>
using namespace std;
void f2(double* ret) {
*ret=5.;
}
int main() {
double ret=0.;
thread t2(f2, &ret);
t2.join();
cout << "ret=" << ret << endl;
}
Est-ce programme de données course libre?
Y a-t-il des garanties, en ce qui concerne le nouveau modèle de mémoire C++, qui accède à la variable ret
du thread t2
et le thread main
sont synchronisés?
Je veux dire, il est évident que les accès de t2
et main
ne vont pas entrer en collision si le programme est exécuté sur le même noyau.
Mais que se passe-t-il si t2
et main
sont exécutés sur différents cœurs?
Y a-t-il des garanties que les caches de core se synchroniseront avant que main
poursuive l'exécution?
J'apprécierais que quelqu'un puisse fournir les mêmes références.
Merci.
Il n'y a pas de synchronisation implicite ici. 'join' est une synchronisation explicite entre les threads. –
ok, j'ai changé le titre. – Predrag