线程结束后同步

时间:2011-02-25 15:22:46

标签: c++ multithreading c++11 race-condition

由于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是同步的?

我的意思是,如果程序在同一核心上执行,很明显t2main的访问不会发生冲突。
但是如果t2main在不同的核心上执行会怎么样? 在main继续执行之前,是否有保证核心缓存会同步?

如果有人能提供相同的参考资料,我会很感激。

谢谢。

1 个答案:

答案 0 :(得分:5)

您的计划免费参加数据竞赛。 [thread.thread.member] / p5描述了带有同步段落的join():

同步:由* this表示的线程的完成同步 用(1.10)相应的成功join()返回。 [注意:*上的操作不同步。 -endnote]

(1.10)指的是[intro.multithread],它是一个太长而无法引用的部分,但在极其详细的情况下定义了短语“与...同步”。

最新的工作草案是N3225