C++标准是否保证线程读取创建前修改的全局变量的一致性?
问题解答
结论:C++标准可以保证所有线程都会输出"hello",不存在主线程对g的赋值延迟到线程创建之后的情况。
原因如下:
- C++标准明确规定,线程创建操作(对应伪代码中的
create_thread,即标准库的std::thread构造)是一个同步点。主线程在创建线程之前完成的所有内存写入操作,对新创建的线程的后续读取操作是可见且有序的。 - 具体到这个场景,主线程里的
g = 1写操作**先行发生于(happens-before)**新线程的启动,自然也先行发生于新线程中对g的读操作。这意味着新线程执行fn时,必然能读取到g = 1的结果,不会读到初始值0。
内容的提问来源于stack exchange,提问作者konchy
相关产品推荐
相关产品推荐

