C11标准规定,对于原子类型(_Atomic),前缀和后缀++
和--
操作 是原子性的(6.5.2.4, p2),赋值运算符op=
也是原子性的(6.5.16.2,p3)。
我没有找到任何关于简单赋值=
的说明。它是否也是原子性的?
假设E1,E2都是int
类型,但只有E1带有_Atomic指示符。我的假设是:
E1 = E2;
等同于:
atomic_store( &E1 , E2 );
我的假设正确吗?
C11标准规定,对于原子类型(_Atomic),前缀和后缀++
和--
操作 是原子性的(6.5.2.4, p2),赋值运算符op=
也是原子性的(6.5.16.2,p3)。
我没有找到任何关于简单赋值=
的说明。它是否也是原子性的?
假设E1,E2都是int
类型,但只有E1带有_Atomic指示符。我的假设是:
E1 = E2;
等同于:
atomic_store( &E1 , E2 );
我的假设正确吗?
除了具有原子性之外,使用使用原子类型的对象的加载和存储使用
memory_order_seq_cst
语义。
memory_order_seq_cst
语义执行的操作具有所有线程观察到的单个排序(也称为顺序一致的排序)。_Atomic
类型限定符,分配可能不是原子的。在32位机器上分配64位值(例如long long
)需要两个CPU周期。如果另一个线程在这两个周期之间读取该值,则它们将获得旧值的4个字节和新值的4个字节。