在一个线程中创建一个对象,并使用std :: atomic访问另一个线程

时间:2014-03-05 18:12:45

标签: c++ multithreading c++11

在C ++ 11中,如果我在一个线程中创建一个对象并将其设置为std::atomic<T*>,是否可以保证构造函数在设置原子变量之前已经完成执行?

具体来说,在下面的代码中,如果“if”语句的计算结果为true,是否保证Widget()构造函数已完成?

std::atomic<Widget*> widget = NULL;

在主题A中:

widget = new Widget();

在主题B中:

if(widget) {
    // Do something with widget
}

1 个答案:

答案 0 :(得分:5)

简答:是的。

长答案:构造函数的效果在按照5.17 [expr.ass] / 1赋值给widget之前进行排序“在所有情况下,赋值在值之后排序 计算左右操作数,并在赋值表达式的值计算之前。“。构造函数完成因此发生在任何与widget的写入同步的widget读取之前。