由于this问题的一部分未得到解决,我将其作为一个单独的问题:
#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
继续执行之前,是否有保证核心缓存会同步?
如果有人能提供相同的参考资料,我会很感激。
谢谢。
答案 0 :(得分:5)
您的计划免费参加数据竞赛。 [thread.thread.member] / p5描述了带有同步段落的join():
同步:由* this表示的线程的完成同步 用(1.10)相应的成功join()返回。 [注意:*上的操作不同步。 -endnote]
(1.10)指的是[intro.multithread],它是一个太长而无法引用的部分,但在极其详细的情况下定义了短语“与...同步”。
最新的工作草案是N3225。