考虑这个例子:
#include <string>
#include <chrono>
#include <atomic>
#include <thread>
#include <iostream>
std::string some_variable;
void writer_thread()
{
std::this_thread::sleep_for( std::chrono::seconds( 1 ) );
some_variable = "done";
}
int main()
{
{
std::thread w( &writer_thread );
w.join();
}
std::cout << some_variable;
}
我是否有必要添加同步机制以确保从some_variable
正确读取main()
?
不同地说:加入或破坏std::thread
对象是否意味着刷新了与其局部变量关联的内存?
答案 0 :(得分:10)
join
提供必要的同步。成功join
之后执行的任何操作都将与线程在结束之前执行的任何操作正确同步。
从标准(C ++ 11 30.3.1.5 [thread.thread.member] / 5),指定thread::join
的行为:
同步:
*this
表示的线程的完成与相应的成功join()
返回同步。