原子操作和内存屏障

原子操作是指保证指令以原子方式执行,不会中途被打断。

linux 提供一个atomic_t类型的原子变量。

类型的具体定义是

typedef struct {
    int counter;
} atomic_t;

内核提供很多操作函数

#define ATOMIC_INIT(i)    { (i) } 申明一个原子变量并初始化为i
#define atomic_read(v)    READ_ONCE((v)->counter) 读取原子变量的值
#define atomic_set(v, i) WRITE_ONCE(((v)->counter), (i)) 设置原子变量为i
#define atomic_dec_return(v)        atomic_sub_return(1, (v)) 原子的给v减一并返回最新v值
#define atomic_inc_return(v)        atomic_add_return(1, (v)) 原子的给v增加一并返回最新v值
#define atomic_xchg(ptr, v)        (xchg(&(ptr)->counter, (v))) 把new值赋值给原子变量v,并且返回v的旧的值
#define atomic_cmpxchg(v, old, new)    (cmpxchg(&((v)->counter), (old), (new)))比较old和v的值,如果相等,则把new的值付给v,返回v的旧值。

内存屏障

ARM结构有三条内存屏障指令

数据存储屏障

数据同步屏障

指令同步屏障

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值