我在一次采访中被告知,在 C 中,使用++ 运算符(比如 i++)是一个原子操作,而说“i += 1”则不是。我认为这些操作在线程安全或原子性方面完全相同。我是不是遗漏了什么,或者这些实际上是不同的?
最佳答案
这是胡说八道。根据数据类型、体系结构和编译器的不同,其中一个可能是原子性的,也可能不是原子性的(除非您使用的是 C11 原子,否则标准一般不会保证原子性),但我看不到任何有充分的理由认为,一般来说,i++
是原子的,而 i += 1
不是。在未使用表达式结果的上下文中,它们很可能实际上生成了相同的代码。
关于c - 增量运算符的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27977145/