硬件原子 *** 作

硬件原子 *** 作,第1张

硬件原子 *** 作

硬件原子 *** 作
    • 并发的根源
    • 并发对程序的不良影响
    • 硬件同步原语
    • 案例
    • 原子整型 *** 作接口
      • 原子整型变量
      • 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) //整型原子变量减i
atomic_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)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5432678.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-11
下一篇2022-12-11

发表评论

登录后才能评论

评论列表(0条)

    保存