c - 增量运算符的原子性

标签 c language-lawyer atomic

我在一次采访中被告知,在 C 中,使用++ 运算符(比如 i++)是一个原子操作,而说“i += 1”则不是。我认为这些操作在线程安全或原子性方面完全相同。我是不是遗漏了什么,或者这些实际上是不同的?

最佳答案

这是胡说八道。根据数据类型、体系结构和编译器的不同,其中一个可能是原子性的,也可能不是原子性的(除非您使用的是 C11 原子,否则标准一般不会保证原子性),但我看不到任何有充分的理由认为,一般来说,i++ 是原子的,而 i += 1 不是。在未使用表达式结果的上下文中,它们很可能实际上生成了相同的代码。

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

相关文章:

Objective-C:完全检索原子属性

c - 如何找到整数数组的大小

c++ - 类名注入(inject)和构造函数

c++ - 关于隐式声明的复制构造函数的引用在逻辑上不清楚

database - 如何使用 Datomic 数据库执行原子操作?

c++ - TPCircularBuffer 中的错误 - atomic_fetch_add

c - Visual Studio Community 2017 cl 链接器不会链接 GTK3 库?

c - 如何在Linux终端中访问已经运行的进程?

c - 创建自定义 gsource 时如何使用串行引脚?

c++ - std::bit_cast 生成多个值的值表示的示例是什么?