make_pair 是原子的吗?
Is make_pair 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
会将字段从其 return 值复制或移动到 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
的赋值运算符是否是原子的,因为它决定了赋值操作是否是线程安全的。赋值发生之前发生的事情,以及被赋值的值是如何产生的,与赋值操作的原子性完全无关。
这个赋值操作不是原子的,也不是线程安全的。
std::pair<Object, OtherObject*> currentData;
void OnCallback()
{
Object object = getObject();
OtherObject* otherObject = new OtherObject();
currentData = std::make_pair(object, otherObject);
}
make_pair
是原子的吗? make_pair
会将字段从其 return 值复制或移动到 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
的赋值运算符是否是原子的,因为它决定了赋值操作是否是线程安全的。赋值发生之前发生的事情,以及被赋值的值是如何产生的,与赋值操作的原子性完全无关。
这个赋值操作不是原子的,也不是线程安全的。