[英]stdatomic (C11), three questions about _Atomic types
我发现cppreference
_Atomic ( type-name )
(自C11起)
用作类型说明符; 这指定了一种新的原子类型
_Atomic type-name
(2)(自C11起)
用作类型限定符; 这指定类型名称的原子版本。 尽管与其他限定符不同,type-name的原子版本可能具有不同的大小,对齐方式和对象表示形式,但它可以与const,volatile和strict混合使用。
那么使用_Atomic(int)
而不是_Atomic int
确保它与int
大小相同吗?
在_Atomic
Ex内部使用限定词:
_Atomic(volatile int)
引发错误,但使用方法如下:
_Atomic(volatile _Atomic(int)*)
才不是; 这是标准行为吗?
我注意到原子功能(例如: atomic_store
, atomic_load
, atomic_compare_exchange_weak
),而不通过类型为工作_Atomic
类型,我还是可以管理的竞争条件,没有问题。 这是标准行为吗? 它有缺点或导致任何错误吗?
第一个问题:
注意:原子整数类型的表示不必与它们相应的常规类型具有相同的大小。 它们应尽可能具有相同的大小,因为这样可以减轻移植现有代码所需的工作量。
第二个问题:
[限制条件]
3原子类型说明符中的类型名称不得引用数组类型,函数类型,原子类型或限定类型。
volatile int
是合格的类型。 甲应以约束部被违反,因此编译器需要输出一个诊断消息。 除此之外,这种构造的行为是不确定的。
第三个问题:
5在以下概要中:
A
是指原子类型之一。
他们期望使用_Atomic
类型。 您传入了非原子变量,因此未定义行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.