首页 >后端开发 >C++ >哪些数据类型在 64 位 GNU C/C 系统上本质上是原子的?

哪些数据类型在 64 位 GNU C/C 系统上本质上是原子的?

Barbara Streisand
Barbara Streisand原创
2024-12-18 04:00:09800浏览

Which Data Types Are Naturally Atomic on a 64-Bit GNU C/C   System?

GNU C 和 GNU C 中 64 位计算机上的哪些类型本质上是原子的?

与 C11 及更高版本或 C 11 及更高版本不同,它们提供使用 _Atomic 或 std::atomic 类型保证原子性,C 和 C 语言标准本身不保证原子读取和写道。相反,原子性级别取决于编译器实现和目标体系结构。

在 x86-64 处理器上运行 Linux 的 64 位计算机上,不同数据类型的自然原子性会有所不同。 GNU C 和 GNU C 编译器( gcc 和 g )为特定类型提供一定级别的原子性。

原子类型:

  • int:头文件中的typedef _Atomic_word;
  • __sig_atomic_t:头文件中的typedef;表示int是原子的。定义原子整数类型,确保在存在异步中断的情况下进行原子读写。

非原子类型:

  • int64_t(长long)
  • uint64_t(无符号 long long)
  • 双精度(64 位)
  • 长双(也64 位)

附加说明:

  • 原子性是指原子读写,而不是原子递增、递减或复合赋值。
  • 需要注意的是,虽然某些类型在某些情况下保证是原子的上下文(例如, volatile sig_atomic_t 对于信号来说是原子的),对于线程来说它们不一定是原子的。
  • 编译器可能会以打破原子性假设的方式优化代码,特别是如果这些假设没有明确语言标准中规定。
  • 为了确保线程安全的并发访问,显式使用 _Atomic 或 std::atomic 类型是推荐。

以上是哪些数据类型在 64 位 GNU C/C 系统上本质上是原子的?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn