我正在尝试确定是否有如下声明:
++value; //assuming "value" is a **global** variable
是原子操作。
我需要知道这个计算是否能够被写入同一个全局变量的中断服务程序中断。
答案 0 :(得分:2)
在没有原子类型的对象上,标准从未将++定义为原子操作。
C11在stdatomic.h中定义了原子类型。
如果您有一个具有原子类型的对象,则 postfix 和前缀运算符++
将原子操作定义为: read-modify-write operation与memory_order_seq_cst
记忆顺序语义。
如果想要原子增量,也可以使用atomic_fetch_add()。