c++ - make_pair 是原子的吗?

标签 c++ thread-safety atomic

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 的标准文档中看到任何相关信息。 .

最佳答案

make_pair() 是否是原子的无关紧要。

If I have another thread accessing the value of currentData, is there any potential that currentData's value will be incomplete when it's accessed?

这里唯一的问题是 std::pair 的赋值运算符是否是原子的,因为它决定了赋值操作是否是线程安全的。赋值发生之前发生的事情,以及被赋值的值是如何产生的,与赋值操作的原子性完全无关。

这个赋值操作不是原子的,也不是线程安全的。

关于c++ - make_pair 是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993512/

相关文章:

c++ - 将 C++ 容器提供给 OpenGL?

c++ - C++11 中的元组有哪些好的用例?

java - 解释导致 HashMap.put() 执行无限循环的时机

delphi - 具有 'thread-safe'读/写操作的Delphi数据类型列表?

C++ winapi32 图表

java - 下面的代码不是线程安全的吗?

c++ - 完全线程安全的 shared_ptr 实现

C++ std::memory_order_relaxed 困惑

git - 使用 Git 进行原子网站更新

c++ - enable_shared_from_this 可以在没有继承的情况下使用吗?