2

考虑这个例子:是否加入std :: thread flush内存?

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

回答

9

join提供必要的syncronisation。在成功join之后,你所做的任何事情都将与线程在结束前做的任何事情正确同步。

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

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

相关问题