道歉,如果这已经被回答,或者如果我失去了一些东西明显。嵌套的原子操作保证是原子吗?
我想了解原子的担保有多深去std::atomic
。例如,如果我们有
std::atomic<int> a(0);
a.store(1);
存储操作是原子的。但是,如果我们有嵌套的原子操作,如出现这种情况是什么:
std::atomic<int> a(0);
std::atomic<int> b(1);
a.store(++b);
我的理解是,++b
是原子,所以是store()
。我是正确的假设,这是保证原子存储2
在a
?
更重要的是,如果a
和b
在线程T1
和T2
之间共享,是它保证由两个线程进行a.store(++b);
将会原子存储b
增加的值(由相应的螺纹如看到的)进入a
在每个线?换句话说,可以跟帖T2
“屁股”,并增加b
一次后T1
已经加过一次,但之前的结果是由T1
存入a
?
假设'B'被螺纹之间共享,'B'的增量可以之前'a.store(++ b)中发生;'。所以'a'的值不能保证是'2'。 – Jarod42