gpt4 book ai didi

c - 简单赋值运算符的原子性

转载 作者:太空狗 更新时间:2023-10-29 17:24:59 25 4
gpt4 key购买 nike

C11 标准规定对于原子类型 (_Atomic),前缀和后缀 ++-- 操作 are atomic (6.5.2.4.,p2),复合赋值也是如此:op= (6.5.16.2,p3)。

我还没有找到任何关于简单赋值 = 的文章。它也是原子的吗?

假设 E1、E2 是 int,但只有 E1 是用说明符 _Atomic 定义的。我的假设是:

E1 = E2;

相当于:

atomic_store( &E1 , E2 );

我的假设正确吗?

最佳答案

按照本 Dr Dobbs article 中的示例, C11 中原子变量的简单赋值是原子的

C11 标准 (ISO/IEC 9899:2011),第 6.2.6.1/9 节内容如下:

Loads and stores of objects with atomic types are done with memory_order_seq_cst semantics.

除了原子性之外,使用 memory_order_seq_cst 语义执行的操作具有所有线程都观察到的单一顺序(aka sequentially-consistent ordering)。

如果没有 _Atomic 类型限定符,赋值可能是非原子的。在 32 位机器上分配 64 位值(例如 long long)需要两个 CPU 周期。如果另一个线程读取这两个周期之间的值,它们将获得 4 个字节的旧值和 4 个字节的新值。

关于c - 简单赋值运算符的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34885006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com