IMX6ULL嵌入式Linux驱动开发学习
以下内容是我在学习正点原子IMX6ULL开发板alpha中记录的笔记,部分摘录自正点原子IMX6ULL开发手册。
Linux并发与竞争
一、并发与竞争
多线程对共享资源同时进行访问,比如全局变量,就会产生并发与竞争现象。以打印机为例,当线程A和线程B同时操作打印机时,就会出现竞争现象,如果没有处理就会导致数据错乱。
二、原子操作atomic
对整形变量或者位进行保护,确保对其进行操作时是最小操作,不会被干扰。
typedef struct {
int counter;
} atomic_t;
atomic_t a = ATOMIC_INIT(0); // 定义原子变量a并赋初值为0;
原子操作API函数
AIOMIC_INIT(int i) // 定义原子变量的时候对其初始化
int atomic_read(atomic_t* v) // 读取原子变量的值,并返回
void atomic_set(atomic_t* v, int i) // 给原子变量设置为i值
void atomic_add(int i, atomic_t* v) // 给原子变量加上i值
void atomic_sub(int i, atomic_t* v) // 给原子变量减去i值
void atomic_inc(atomic_t* v) // 原子变量自增1
void atomic_dec(atomic_t* v) // 原子变量自减1
int atomic_dec_return(atomic_t* v) // 原子变量减1,并且返回v的值
int atomic_inc_return(atomic_t* v) // 原子变量加1,并且返回v的值
int atomic_sub_and_test(int i, atomic_t* v) // 从v减i,如果结果为0就返回真,否则返回假

本文围绕Linux并发与竞争展开,介绍了多线程访问共享资源时产生的并发与竞争现象。还阐述了原子操作、原子位操作、自旋锁、信号量和互斥锁等机制,包括各自的特点、适用场景、使用注意事项及相关函数和示例。
最低0.47元/天 解锁文章
671

被折叠的 条评论
为什么被折叠?



