Поскольку часть этого вопроса не была рассмотрена, я делаю его отдельным вопросом:
#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;
}
Свободна ли эта гонка данных программы?
Существуют ли какие-либо гарантии в отношении новой модели памяти C ++, что доступ к переменной ret
из потока t2
и потока main
синхронизирован?
Я имею в виду, очевидно, что доступы из t2
и main
не будут конфликтовать, если программа выполняется на том же ядре.
Но что, если t2
и main
выполняются на разных ядрах?
Есть ли гарантии, что кеши ядра синхронизируются до того, как main
продолжит выполнение?
Буду признателен, если кто-нибудь предоставит такие же ссылки.
Спасибо.