简单赋值运算符的原子性

Atomicity of the simple assignment operator

C11 标准表示对于原子类型 (_Atomic)、前缀和后缀 ++-- 操作 are atomic (6.5.2.4.,p2),复合赋值也是如此: op= (6.5.16.2,p3)。

我没有找到任何关于简单作业的文章 =。它也是原子的吗?

假设 E1、E2 是 int,但只有 E1 是使用说明符 _Atomic 定义的。 我的假设是:

E1 = E2;

相当于:

atomic_store( &E1 , E2 );

我的假设正确吗?

按照这个Dr Dobbs article中的例子,C11中原子变量的简单赋值是原子的

C11 标准(ISO/IEC 9899:2011),第 6.2.6.1/9 节内容如下:

Loads and stores of objects with atomic types are done with memory_order_seq_cst semantics.

除了原子性之外,使用 memory_order_seq_cst 语义执行的操作具有所有线程(又名 sequentially-consistent ordering)观察到的单一顺序。

没有 _Atomic 类型限定符,赋值可能是 non-atomic。在 32 位机器上分配 64 位值(例如 long long)需要两个 CPU 周期。如果另一个线程读取这两个周期之间的值,它们将获得 4 个字节的旧值和 4 个字节的新值。