017_linux驱动之_信号量

Posted 陆小果哥哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了017_linux驱动之_信号量相关的知识,希望对你有一定的参考价值。

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驱动之_信号量的主要内容,如果未能解决你的问题,请参考以下文章

014_linux驱动之_信号符号名描述和它们的信号值

001_linux驱动之_驱动的加载和卸载

006_linux驱动之_ioremap函数使用

003_linux驱动之_file_operations函数

第1个linux驱动___安装驱动模块之内核再爱我一次

005_linux驱动之_class_device_create函数