码迷,mamicode.com
首页 > 系统相关 > 详细

017_linux驱动之_信号量

时间:2018-09-22 17:03:10      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:休眠   互斥锁   没有   图片   常用方法   使用   nlog   应用   程序   

2. 信号量
信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码。
当获取不到信号量时,进程进入休眠等待状态。
 
定义信号量
struct semaphore sem;
初始化信号量
void sema_init (struct semaphore *sem, int val);
void init_MUTEX(struct semaphore *sem);//初始化为0
 
static DECLARE_MUTEX(button_lock);     //定义互斥锁
 
获得信号量
void down(struct semaphore * sem);
int down_interruptible(struct semaphore * sem); 
int down_trylock(struct semaphore * sem);
释放信号量
void up(struct semaphore * sem);
 
 
使用示例:
1. 定义互斥锁信号量:
技术分享图片
2. 获取信号量
技术分享图片
在上面获取信号量中,因为我们定义的是互斥锁,所以当运行第一次down(&button_lock);时候可以往下运行,
当第二次运行时候假如没有释放的话会进入休眠状态,不会往下运行了
 
3. 释放信号量
技术分享图片

注:
1. 定义信号量时候当然是全局定义了
2. 获取信号量我们一般在open函数中使用
3. 释放信号量我们可以在release函数中释放掉
4. 从上面中我们就可以设置,一个应用程序只会打开一次,当打开第二次时候要正确运行的话需要删除第一个应用程序

017_linux驱动之_信号量

标签:休眠   互斥锁   没有   图片   常用方法   使用   nlog   应用   程序   

原文地址:https://www.cnblogs.com/luxiaoguogege/p/9690250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!