加入std :: thread刷新内存?

时间:2014-11-24 16:19:19

标签: c++ multithreading c++11 synchronization c++-standard-library

考虑这个例子:

#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对象是否意味着刷新了与其局部变量关联的内存?

1 个答案:

答案 0 :(得分:10)

join提供必要的同步。成功join之后执行的任何操作都将与线程在结束之前执行的任何操作正确同步。

从标准(C ++ 11 30.3.1.5 [thread.thread.member] / 5),指定thread::join的行为:

  

同步: *this表示的线程的完成与相应的成功join()返回同步。

相关问题