SylixOS原子量操作
概念
原子量操作是对一个整形变量进行的不可被打断的一系列操作接口。
当我们的程序存在较多对变量的互斥访问时,我们的程序必然存在较多的锁和锁操作,一方面这使得我们的程序难以编写和维护,另一方面不合理的锁操作可能会发生死锁。 为了避免这些问题,SylixOS提供了原子量类型atomic_t及其API,原子量类型可储存一个整型INT类型的值,同时使用原子量API对原子量进行的操作是一个原子操作,因为原子操作不可打断,这样在设备驱动的并发操作中也就不会存在混乱风险。
接口
atomic_t类型定义
typedef struct {volatile INT counter;
} atomic_t;#ifdef __GNUC__
typedef struct {volatile INT64 __attribute__((aligned(8))) counter;
} atomic64_t;#else
typedef struct {volatile INT64 counter;
} atomic64_t;
#endif
32位版调用接口
INT API_AtomicAdd(INT iVal, atomic_t *patomic);
INT API_AtomicSub(INT iVal, atomic_t *patomic);
INT API_AtomicInc(atomic_t *patomic);
INT API_AtomicDec(atomic_t *patomic);
INT API_AtomicAnd(INT iVal, atomic_t *patomic);
INT API_AtomicNand(INT iVal, atomic_t *patomic);
INT API_AtomicOr(INT iVal, atomic_t *patomic);
INT API_AtomicXor(INT iVal, atomic_t *patomic);
VOID API_AtomicSet(INT iVal, atomic_t *patomic);
INT API_AtomicGet(atomic_t *patomic);
INT API_AtomicSwp(INT iVal, atomic_t *patomic);
INT API_AtomicCas(atomic_t *patomic, INT iOldVal, INT iNewVal);
64位版调用接口
INT64 API_Atomic64Add(INT64 i64Val, atomic64_t *patomic64);
INT64 API_Atomic64Sub(INT64 i64Val, atomic64_t *patomic64);
INT64 API_Atomic64Inc(atomic64_t *patomic64);
INT64 API_Atomic64Dec(atomic64_t *patomic64);
INT64 API_Atomic64And(INT64 i64Val, atomic64_t *patomic64);
INT64 API_Atomic64Nand(INT64 i64Val, atomic64_t *patomic64);
INT64 API_Atomic64Or(INT64 i64Val, atomic64_t *patomic64);
INT64 API_Atomic64Xor(INT64 i64Val, atomic64_t *patomic64);
VOID API_Atomic64Set(INT64 i64Val, atomic64_t *patomic64);
INT64 API_Atomic64Get(atomic64_t *patomic64);
INT64 API_Atomic64Swp(INT64 i64Val, atomic64_t *patomic64);
INT64 API_Atomic64Cas(atomic64_t *patomic64, INT64 i64OldVal, INT64 i64NewVal);
SylixOS原子量操作相关推荐
- java 原子量_Java原子量 - Rickxue的个人空间 - OSCHINA - 中文开源技术交流社区
所谓的原子量即操作变量的操作是"原子的",该操作不可再分,因此是线程安全的. 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题.在Java5之前,可以通过vola ...
- linux设备驱动读书笔记
linux设备驱动读书笔记 设备驱动简介 机制:提供什么能力 策略:如何使用这些能力 在编写驱动时, 程序员应当编写内核代码来存取硬件, 但是不能强加特别的策略给用户, 因为不同的用户有不同的需求. ...
- linux设备驱动读书笔记(转)
linux设备驱动读书笔记 设备驱动简介 机制:提供什么能力 策略:如何使用这些能力 在编写驱动时, 程序员应当编写内核代码来存取硬件, 但是不能强加特别的策略给用户, 因为不同的用户有不同的需求. ...
- 关于大型网站技术演进的思考
关于大型网站技术演进的思考(一)--存储的瓶颈(1) 前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训,两天12个小时信息量非常大,知识的广度和难度也非常大,培训完后我很难完整理出 ...
- SylixOS命令行下内存操作/测试工具
源头 memAccessCmd是用于SylixOS下对内存/寄存器进行访问和测试的工具. SylixOS下调测程序,无论是应用.驱动还是内核,如果能查看并操作指定内存/寄存器,将是一个非常有效的手段. ...
- SylixOS动态内存分配操作
SylixOS 系统内存管理分为两大类: 内存堆管理和虚拟内存管理. 对用户来说内存堆管理的分配最小单位为 1 个字节, 虚拟内存管理分配最小单位为 1 个页面(通常为 4096 字节) 内核部分 操 ...
- SylixOS中的CPU集合及其操作
SylixOS中的CPU集合及其操作 SylixOS支持SMP多核模式,在表示CPU集合时(如中断和线程绑定)通过一个位图来表示,操作和SylixOS位图接口类似,但并需要快速查找最低位,所以并不使用 ...
- SylixOS软件开发-基础操作
学习sylixos SylixOS开发环境获取 代码结构 第一个APP 移植开源软件libcurl 下载libcurl的源码 预处理 新建移植工程 修改配置文件 编译 链接库 curl参考代码 核心文 ...
- SylixOS 绑核操作
指定线程在某些 CPU 运行,SylixOS 中只能指定一个 CPU LW_API int pthread_setaffinity_np(pthread_t thread, size_t setsiz ...
- SylixOS内核打印调试方法
1.增加系统日志消息缓冲最大数量 在使用printk的时候,经常会碰到已经加了打印语句,但是终端上却并没有显示出来信息这种情况,原因是系统默认的缓冲大小有限,而打印信息又比较多,从而导致后面的打印信息 ...
最新文章
- Openvswitch原理与代码分析(3): openvswitch内核模块的加载
- TP3.2.3 页面跳转后 Cookie 失效 —— 参考解决方案
- 在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android
- Windows系统笔记本禁用自带键盘
- 机械秒表的使用方法_让console.log()不再是你的唯一选项js日志输出6种方法
- java_io学习_编码
- react源码分析:babel如何解析jsx
- 有赞多平台推广接入与测试
- 一篇文章看懂Yandex SEO:俄罗斯外贸从这里开始
- “一县一店·全国乡土消费社群”平台:助力乡村振兴农产上行
- 13. 查询表orders——统计销售总量大于50的各类商品的ID和销售总量
- IE无法打开internet站点已终止操作的解决办法
- 微信访问IP地址页面出现的问题
- Maple学习笔记——编程
- ubuntu: sudo apt-get update老是失败怎么办?
- Android Watchdog分析
- no suitable driver found解决方法
- 阿里云ACE高级工程师的备考经验分享
- 关于安装office,出现你已安装32位,无法安装64位问题的解决方法
- MATLAB学习笔记之matlab程序流程控制