017_linux驱动之_信号量

  1. 信号量
    信号量(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. 定义互斥锁信号量:
    017_linux驱动之_信号量

  2. 获取信号量
    017_linux驱动之_信号量
    在上面获取信号量中,因为我们定义的是互斥锁,所以当运行第一次down(&button_lock);时候可以往下运行,
    当第二次运行时候假如没有释放的话会进入休眠状态,不会往下运行了

  3. 释放信号量
    017_linux驱动之_信号量

注:

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