加入std :: thread刷新内存?

qdi*_*dii 2 c++ multithreading synchronization c++-standard-library c++11

考虑这个例子:

#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;
}
Run Code Online (Sandbox Code Playgroud)

我是否有必要添加同步机制以确保some_variable正确读取main()

换句话说:连接或破坏std::thread对象是否意味着刷新与其局部变量相关联的存储器?

Mik*_*our 10

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

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

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