首页 >后端开发 >C++ >哪些 C 和 C 类型在 64 位 x86-64 系统上表现出自然的原子行为?

哪些 C 和 C 类型在 64 位 x86-64 系统上表现出自然的原子行为?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-14 07:40:11989浏览

Which C and C   Types Exhibit Naturally Atomic Behavior on a 64-Bit x86-64 System?

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

与语言标准不同,GNU C 和 GNU C 编译器基于特定体系结构处理原子性。虽然 C11 和 C 11 引入了 _Atomic 类型和 std::atomic 。分别类型,本文仅关注自然原子读取和写入,不包括原子递增、递减或复合赋值。

64 位 Linux 计算机上的原子性保证

在 64 位 Linux 上具有 x86-64 处理器的计算机,以下类型具有天然的原子读取和写道:

  • int
  • _Atomic_word

但是,值得注意的是,根据语言标准,即使这些类型也不是绝对自动原子的。

理解原子性

主要有两个“原子”的含义:

  • 关于信号的原子:确保在不同指令执行期间调用的信号处理程序只会看到 易失性 sig_atomic_t 变量的旧值或新值。
  • 相对于线程的原子性:保证并发访问对象将导致所有线程看到正确的值。为了实现这一点,_Atomic 或 std::atomic 类型是必要的。

编译器优化和原子性

仅仅因为类型在硬件级别自然是原子的,并不意味着编译器将始终使用原子指令来访问它。优化可能会导致非原子访问,即使对于已知在目标硬件上是原子的数据类型也是如此。

例如,从 x86 上的 32 位整数加载是原子的,但编译器可能会使用不保证原子性的 16 位部分加载或存储。

结论

综上所述,C 或 C 中没有类型C 在 64 位计算机上绝对是自动原子的。为了确保原子访问,使用 _Atomic 或 std::atomic 类型或依赖文档来验证特定架构和编译器的原子保证至关重要。

以上是哪些 C 和 C 类型在 64 位 x86-64 系统上表现出自然的原子行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

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