栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

硬件原子操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

硬件原子操作

硬件原子操作
    • 并发的根源
    • 并发对程序的不良影响
    • 硬件同步原语
    • 案例
    • 原子整型操作接口
      • 原子整型变量
      • 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)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/457160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号