我想大致这样做:
初始线程:
std::atomic<>
。 其他线程:
现在,我知道可以将参数传递给
std::thread
,但是我试图通过此示例理解C++的内存保证。另外,我非常有信心,在任何实际的实现中,创建线程都会造成内存障碍,从而确保该线程可以“看到”父线程在此之前编写的所有内容。
但是我的问题是:这是标准所保证的吗?
另外:我想我可以添加一些虚拟的
std::atomic<int>
左右,并在启动其他线程之前对其进行写入,然后在其他线程上,在启动时读取一次。我相信,所有发生的事情都会确保之前编写的全局状态正确可见。但是我的问题是,在技术上是否需要类似的东西,或者创建线程是否足够?
最佳答案
创建线程就足够了。每个[thread.thread.constr]/7的线程构造函数和新线程的开始之间都有一个同步点
Synchronization: The completion of the invocation of the constructor synchronizes with the beginning of the invocation of the copy of
f
.
这意味着在生成新线程之前,线程中的所有状态对于生成的线程都是可见的。
关于c++ - 产生线程是否自己提供内存顺序保证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60423427/