我在某处读到,一元运算符本质上是原子的,因此它们可以像在多线程环境中一样使用。为了确认这一点,我编写了两个单独的程序,其中

  • 我使用变量x并使用一元运算符++ x递增
  • 我使用变量x并使用x = x + 1
  • 递增

    我比较了两个程序的反汇编,发现没有区别。请提供您对此的意见。

    最佳答案



    该消息来源是完全错误的。您需要使用std::atomic(或C等效项)来实现原子性-一元运算并不特殊。



    这并不意味着生成的操作是原子的。这没有什么区别,因为任何体面的编译器都会将x=x+1++x优化到同一程序集中(假定内置类型)。

    关于c++ - 一元增量算子的原子行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53832063/

    10-11 16:40