繁体   English   中英

stdatomic(C11),关于_Atomic类型的三个问题

[英]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_storeatomic_loadatomic_compare_exchange_weak ),而不通过类型为工作_Atomic类型,我还是可以管理的竞争条件,没有问题。 这是标准行为吗? 它有缺点或导致任何错误吗?

第一个问题:

C11 7.17.6p3

注意:原子整数类型的表示不必与它们相应的常规类型具有相同的大小。 它们应尽可能具有相同的大小,因为这样可以减轻移植现有代码所需的工作量。

第二个问题:

C11 6.7.2.4p3

[限制条件]

3原子类型说明符中的类型名称不得引用数组类型,函数类型,原子类型或限定类型。

volatile int是合格的类型。 以约束部被违反,因此编译器需要输出一个诊断消息。 除此之外,这种构造的行为是不确定的。

第三个问题:

C11 7.17.1.p5

5在以下概要中:

  • A是指原子类型之一。

他们期望使用_Atomic类型。 您传入了非原子变量,因此未定义行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM