Linux并发与同步(一)原子操作/spinlock/mutex

背景

在linux内核和驱动代码中,需要对共享数据进行保护,防止共度资源被并发访问而发生数据覆盖,被访问数据不一致的情况.这些情况可能会造成系统不稳定,且很难跟踪调试.

  • 临界区: 访问和操作共享数据的代码段.
  • 临界资源: 共享的数据(静态局部变量,全局变量,buffer, 链表等).
  • 并发源:访问临界区的线程或执行路径.

内核4种并发源:

  • 中断和异常 
  • 软中断和taskelt
  • 内核抢占
  • 多处理器并发执行

原子操作

原子操作是指指令以原子方式执行,过程不会被打断.
ARM中使用ldrex与strex指令保证操作的原子性.
在Linux内核中提供了一系统的原子整数操作函数。

ATOMIC_INIT(int i)  //在声明一个atmoic_t变量时,将它初始化为i
ATOMIC_INIT(int i)  //在声明一个atmoic_t变量时,将它初始化为i
int atmoic_read(atmoic_t *v)    //原子地读取整数变量v
void atmoic_set(atmoic_t *v,int i)  //原子地设置v值为i
void atmoic_add(atmoic_t *v,int i)  //原子地从v值加i
void atmoic_sub(atmoic_t *v,int i)  //原子地从v值减i
void atmoic_inc(atmoic_t *v)    //原子地从v值加1
void atmoic_dec(atmoic_t *v)    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值