make_pair是原子的吗?

时间:2016-05-03 00:04:16

标签: c++ thread-safety atomicity

std::pair<Object, OtherObject*> currentData;

void OnCallback()
{
    Object object = getObject();
    OtherObject* otherObject = new OtherObject();
    currentData = std::make_pair(object, otherObject);
}

make_pair是原子的吗? make_pair会将字段从其返回值复制或移动到currentData吗?如果我有另一个线程访问currentData的值,那么当currentData的值被访问时,它是否有可能不完整?

很遗憾,我没有在make_pair的标准文档中看到任何相关信息。

1 个答案:

答案 0 :(得分:5)

make_pair()是原子还是原子是不相关的。

  

如果我有另一个线程访问currentData的值,那么   任何当前数据的值都不完整的潜在可能性   访问?

这里唯一的问题是std::pair的赋值运算符是否是原子的,因为这决定了赋值操作是否是线程安全的。在任务发生之前发生了什么,以及所分配的价值是如何形成的,与任务操作的原子性完全无关。

此赋值操作不是原子操作,并且不是线程安全的。