【发布时间】:2020-09-14 09:22:41
【问题描述】:
我有一个关于原子操作的问题,以及它在 c++ 中的阐述:
std::atomic<int> my_value{0};
//...
// 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_value{0};
//...
// 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)
标签: c++ multithreading atomic