【发布时间】:2016-05-03 00:04:16
【问题描述】:
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 的标准文档中没有看到任何相关信息。
【问题讨论】:
-
你能解释一下“原子”是什么意思吗?因为它显然不是
std::atomic意义上的原子。 -
std::make_pair使用移动语义,但这并不意味着它是符合std::atomic的原子 -
如果不是
std::atomic的意思,那么你的意思是什么意思。因为你引用的感觉似乎是std::atomic所做的。 -
@LokiAstari 我认为我的整个问题归结为赋值运算符的原子性。这对我有帮助:stackoverflow.com/questions/8919818/… 我什至都懒得看
std::atomic课程,但看起来这就是我想要的。这也帮助了我:stackoverflow.com/questions/16320838/…
标签: c++ thread-safety atomic