首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stdatomic (C11),关于_Atomic类型的三个问题

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

Stack Overflow用户
提问于 2017-12-26 14:35:23
回答 1查看 1.4K关注 0票数 1

第一个问题

我在cppreference上发现

  • _Atomic ( type-name ) (自C11以来) 用作类型说明符;这指定了一个新的原子类型。
  • _Atomic type-name (2) (自C11以来) 用作类型限定符;这指定了类型名称的原子版本。在这个角色中,它可能与const、volatile混合在一起,尽管与其他限定符不同,类型名称的原子版本可能具有不同的大小、对齐方式和对象表示形式。

那么,使用_Atomic(int)而不是_Atomic int是否保证其大小与int相同?

第二个问题

_Atomic Ex中使用限定符:

代码语言:javascript
复制
_Atomic(volatile int)

抛出一个错误,但是像这样使用它:

代码语言:javascript
复制
_Atomic(volatile _Atomic(int)*)

不是,这是标准的行为吗?

最后一个问题

我注意到原子函数(例如:atomic_storeatomic_loadatomic_compare_exchange_weak)工作,没有传递的类型是_Atomic类型,而且我仍然可以毫无问题地管理竞争条件。这是标准行为吗?它是否有缺点或导致任何错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-26 15:36:44

第一个问题:

C11 7.17.6p3

注意,原子整数类型的表示不需要具有与其相应的正则类型相同的大小。只要有可能,它们就应该具有相同的大小,因为它简化了移植现有代码所需的工作。

第二个问题:

C11 6.7.2.4p3

约束 3原子类型说明符中的类型名称不应指数组类型、函数类型、原子类型或限定类型

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

第三个问题:

C11 7.17.1.p5

5.在下列概要中:

  • A 指原子类型之一.

他们期望一种_Atomic类型。您传递一个非原子变量,因此未定义行为。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47980009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档