我想大致这样做:
初始线程:
- 向全局变量写入一些值(它们将不再被写入)
- 这可能是中等大小的数据(数组,字符串等)。无法简单地制造
std::atomic<>
。
- 这可能是中等大小的数据(数组,字符串等)。无法简单地制造
- 产生其他线程
其他线程:
- 读取全局状态
- 做工作等
现在,我知道可以将参数传递给std::thread
,但是我试图通过此示例理解C ++的内存保证。
另外,我非常有信心,在任何实际的实现中,创建线程都会造成内存障碍,从而确保线程可以“看到”父线程在此之前编写的所有内容。
但是我的问题是:这是否由标准保证?
另外:我想我可以添加一些虚拟对象std::atomic<int>
,然后在启动其他线程之前写入该虚拟对象,然后在其他线程上,在启动时读取一次。我相信所有发生的事情都会确保之前编写的全局状态正确可见。
但是我的问题是,技术上是否需要类似的东西,或者线程创建是否足够?
@NathanOliver d'oh。已删除评论。无论我的问题多么愚蠢,我都无法数出您在这里帮助过我的频率...
—
idclev 463035818
@ idclev463035818不用担心。它发生在我们所有人身上。
—
NathanOliver
std::atomic<int>
...可以使用std::atomic_thread_fence
。