正点原子linux阿尔法开发板使用——Linux 并发与竞争
原子操作原子变量和原子位原子操作的API:自旋锁1、自旋锁自旋锁是轻量级的。自旋锁的定义:自旋锁的API
·
原子操作
原子变量和原子位
原子操作的API:
自旋锁
1、自旋锁
自旋锁是轻量级的。
自旋锁的定义:
自旋锁的API
自旋锁禁止抢占:
线程与中断:
自旋锁注意事项
信号量
互斥体
Linux 并发与竞争实验
原子操作:
在结构体中添加lock原子变量。
在open函数操作:
锁定驱动
释放驱动
应用程序模拟应用占用驱动25S
应用程序跑25s,在这25s之内无法再次打开该GPIO。
自旋锁
结构体内添加新成员:
spinlock是为了保护变量“state”
考虑到驱动的可移植性,推荐使用如下函数。
spin_lock_irqsave(&dev->lock, flags);
if (dev->state)
{
dev->state--;/*驱动可以使用*/
}
spin_lock_irqsave(&dev->lock, irqflag);
信号量
包含头文件:
#include <linux/semaphore.h>
初始化信号量
获取信号量:
释放信号量:
信号量在休眠的时候会自动唤醒 进行下次实验。
互斥体
结构体中添加互斥体:
互斥体初始化:
上锁互斥体:
解锁互斥体:
更多推荐
已为社区贡献1条内容
所有评论(0)