250*_*501 6 c standards atomic language-lawyer c11
C11标准表示对于原子类型(_Atomic),前缀和后缀++
以及--
操作是原子的(6.5.2.4.,p2),复合赋值也是如此:op=
(6.5.16.2,p3).
我还没有找到任何关于简单作业的文章=
.它也是原子的吗?
让我们说E1,E2是int
,但只有E1用说明符_Atomic定义.我的假设是:
E1 = E2;
Run Code Online (Sandbox Code Playgroud)
相当于:
atomic_store( &E1 , E2 );
Run Code Online (Sandbox Code Playgroud)
我的假设是正确的吗?
按照Dobbs 博士文章中的示例,C11 中原子变量的简单赋值是原子的。
C11 标准 (ISO/IEC 9899:2011),第 6.2.6.1/9 节内容如下:
具有原子类型的对象的加载和存储是通过
memory_order_seq_cst
语义完成的。
除了原子性之外,使用memory_order_seq_cst
语义执行的操作还具有所有线程都观察到的单一顺序(也称为顺序一致的顺序)。
如果没有_Atomic
类型限定符,赋值可能是非原子的。long long
在 32 位机器上分配 64 位值(例如 a )需要两个 CPU 周期。如果另一个线程读取这两个周期之间的值,它们将获得 4 个字节的旧值和 4 个字节的新值。
归档时间: |
|
查看次数: |
183 次 |
最近记录: |