请问:C整形变量赋数值、++、--等是不是原子操作?

2019-12-27 18:58发布

就是如同下面的例子:

int i;

i = 123;
i++;
i--;

诸如此类......
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
37条回答
flamma
2019-12-30 22:45
另外ARM系列也有atomic系列的函数。有些ARM架构的atomic实现里面就有开关中断,有些架构的实现就不会开关中断。比如M0,M3,M4的实现:

#define ATOMIC_OP(asm_op, a, v) do {                               
        uint32_t reg0;                                               
                                                               
        __asm__ __volatile__("   cpsid i "                       
                             "   ldr  %0, [%1] "               
                             #asm_op" %0, %0, %2 "               
                             "   str  %0, [%1] "               
                             "   cpsie i "                       
                             : "=&b" (reg0)                       
                             : "b" (a), "r" (v) : "cc");       
} while (0)

static inline void atomic_add(uint32_t volatile *addr, uint32_t value)
{
        ATOMIC_OP(add, addr, value);
}
static inline void atomic_sub(uint32_t volatile *addr, uint32_t value)
{
        ATOMIC_OP(sub, addr, value);
}

这里就看出这样的好处是多并发的程序不需要频繁的开关中断和lock/unlock,会有很大的性能提升。同样可以看出,指令上还是有开销的。

一周热门 更多>