小编wre*_*ode的帖子

使用较旧的gcc __sync builtins进行原子获取/加载和设置/存储

我正在使用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.

c gcc

7
推荐指数
1
解决办法
3667
查看次数

标签 统计

c ×1

gcc ×1