gpt4 book ai didi

c++ - 线程结束后同步

转载 作者:行者123 更新时间:2023-11-30 01:30:00 25 4
gpt4 key购买 nike

因为 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++ 内存模型,是否可以保证线程 t2 和线程 main 对变量 ret 的访问是同步的?

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

如果有人可以提供相同的引用资料,我将不胜感激。

谢谢。

最佳答案

您的程序没有数据竞争。 [thread.thread.member]/p5 用一段同步描述了join():

同步:*this表示的线程完成同步与 (1.10) 相应的成功 join() 返回。 [注意:对 *this 的操作是不同步的。 ——尾注]

(1.10) 指的是 [intro.multithread],这是一个太长而无法引用的部分,但以极其详细的方式定义了短语“同步于”。

最新的工作草案是N3225 .

关于c++ - 线程结束后同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com