我正在使用gcc 4.6的(供应商分支),并且需要对无符号整数进行4次基本原子操作
.此gcc版本不支持较新的__atomix_XXX内置,只有__sync内置.
这意味着我可以执行以下操作:
#define ATOMIC_INC(ptr) __sync_fetch_and_add((ptr),1)
#define ATOMIC_DEC(ptr) __sync_fetch_and_sub((ptr),1)
#define ATOMIC_GET(ptr) __sync_fetch_and_add((ptr),0)
Run Code Online (Sandbox Code Playgroud)
但是,我找不到一种方法来实现一个#define ATOMIC_SET()原子设置变量的方法,有没有办法用gcc 4.6.x实现这个目的?
另外,有没有更好的方法来实现上述ATOMIC_GET()?从原子的角度看,生成的程序集看起来很好,尽管由于实际执行了添加操作,它是次优的.
编辑:有问题的架构是ARMv6,x86和x86_64.