一个关于原子操作的问题及其 c++ 说明
Posted
技术标签:
【中文标题】一个关于原子操作的问题及其 c++ 说明【英文标题】:A question about atomic operation and its c++ exposition 【发布时间】:2020-09-14 09:22:41 【问题描述】:我有一个关于原子操作的问题,以及它在 c++ 中的阐述:
std::atomic<int> my_value0;
//...
// executed on thread 1
int a = my_value++;
//...
//executed on thread 2
int b= my_value++;
对我来说,std::atomic::operator++ 确保 my_value == 2 ,但它也确保a=0, b=1 或 a=1, b=0 吗?强>
据我了解,只有增量操作是原子的,我以某种方式将此代码视为:
std::atomic<int> my_value0;
//...
// executed on thread 1
int a = m_value;
my_value++;
//...
//executed on thread 2
int b= my_value;
my_value++;
但是我看到一些实现似乎假设做作和增量都是原子的......为什么,以及如何?
提前感谢您的宝贵时间!
【问题讨论】:
在第一个例子中 ++ 操作是原子的。在第二个中,每个 load 和 ++ 都是原子的,但它的组合不是(你也可以得到 a=0 b=0) 【参考方案1】:据我了解,只有增量操作是原子的...
错了。 读取实际值和(后)增量都是单个原子操作。与fetch_add(1);
相同。注意操作名称中的“fetch”。
【讨论】:
以上是关于一个关于原子操作的问题及其 c++ 说明的主要内容,如果未能解决你的问题,请参考以下文章