- 并发的根源
- 并发对程序的不良影响
- 硬件同步原语
- 案例
- 原子整型操作接口
- 原子整型变量
- ATOMIC_INIT()
- atomic_set()
- atomic_read()
- atomic_add()/atomic_sub()
- atomic_inc()/atomic_dec()
- 位原子操作函数
- set_bit()
- clear_bit()
- change_bit()
- 多线程、多进程调度
- 各种中断
- 篡改共享数据
- 动作不完整
- 同步、死锁、数据竞争、系统调度开销…
由计算机硬件提供的一组原子操作,具有不可分割性,避免并行运算执行错误。
案例//C语言代码 进程一:i=10 进程二:i=20 //汇编代码 进程一: ldr r0, =0x30000000 ldr r1, = 10 str r1, [r0] 进程二: ldr r0, =0x30000000 ldr r1, = 20 str r1, [r0]原子整型操作接口 原子整型变量
typedef struct {
int counter;
} atomic_t;
ATOMIC_INIT()
定义整型原子变量并设置初始值
atomic_t data = ATOMIC_INIT(int i)atomic_set()
用于设置整型原子变量的值
atomic_set(atomic_t *v,int i)atomic_read()
获取原子变量的值
atomic_read(atomic_t *v)atomic_add()/atomic_sub()
整型原子变量的加/减
static inline void atomic_add(int i, atomic_t *v) //整型原子变量加i static inline void atomic_sub(int i, atomic_t *v) //整型原子变量减iatomic_inc()/atomic_dec()
整型原子变量自增/自减
static inline void atomic_inc(atomic_t *v) //整型原子变量自增1 static inline void atomic_dec(atomic_t *v)//整型原子变量自减1位原子操作函数 set_bit()
将某一位置1
set_bit(int nr, unsigned long *addr)clear_bit()
将某一位置0
clear_bit(int nr, unsigned long *addr)change_bit()
反转某一位的值
int test_bit(int nr, unsigned long *addr)



