与语言标准不同,GNU C 和 GNU C 编译器基于特定体系结构处理原子性。虽然 C11 和 C 11 引入了 _Atomic 类型和 std::atomic 。分别类型,本文仅关注自然原子读取和写入,不包括原子递增、递减或复合赋值。
在 64 位 Linux 上具有 x86-64 处理器的计算机,以下类型具有天然的原子读取和写道:
但是,值得注意的是,根据语言标准,即使这些类型也不是绝对自动原子的。
主要有两个“原子”的含义:
仅仅因为类型在硬件级别自然是原子的,并不意味着编译器将始终使用原子指令来访问它。优化可能会导致非原子访问,即使对于已知在目标硬件上是原子的数据类型也是如此。
例如,从 x86 上的 32 位整数加载是原子的,但编译器可能会使用不保证原子性的 16 位部分加载或存储。
综上所述,C 或 C 中没有类型C 在 64 位计算机上绝对是自动原子的。为了确保原子访问,使用 _Atomic 或 std::atomic 类型或依赖文档来验证特定架构和编译器的原子保证至关重要。
以上是哪些 C 和 C 类型在 64 位 x86-64 系统上表现出自然的原子行为?的详细内容。更多信息请关注PHP中文网其他相关文章!