是原子为std :: atomic <int>

NoS*_*tAl 9 atomic c++11

根据一个Channel 9 E2E视频(其中包含Herb Sutter),如果number atomic<int> number++是原子的,则在c ++ 0x中.有人可以确认它是如何在最终的C++ 11标准中(让我们假装它已经完成:)).

spr*_*aff 14

该标准最终确定,并在所有的标准组成专业化的每个操作atomic<T>是原子.

这并不意味着涉及标准积分的所有表达式atomic<T>都是原子的.

number = number * 2;
Run Code Online (Sandbox Code Playgroud)

是两个操作:

temporary = number * 2;
number = temporary;
Run Code Online (Sandbox Code Playgroud)

他们每个人都是原子的,但他们在一起却不是.这是交易/关键部分的用途.

  • 每个为`atomic <T>`定义*的操作都是原子的,比如`number*= 2;`和`number + = 47;`. (7认同)
  • number = number*2是*两个*操作.*它们中的每一个都是原子的,但它们不是一起的.这就是"交易"的用途. (3认同)

τεκ*_*τεκ 7

是.atomic<int> operator++使用atomic<int>::fetch_add哪种是原子操作.

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf p.1127