zoukankan      html  css  js  c++  java
  • liunx驱动----信号量的实现

    使用信号量必须包含  <asm/semaphore.h>  头文件.其中相关结构体  struct semaphore

    可以通过以下几种方式来声明或者初始化。

    1.void sema_init(struct semaphore *sem, int val)  

      代码如下:val为设置信号量的初始值

      

    static inline void sema_init(struct semaphore *sem, int val)
    {
        atomic_set(&sem->count, val);//设置型号量的初始值。
        sem->sleepers = 0;
        init_waitqueue_head(&sem->wait);
    }

    2.DECLARE_MUTEX(name)

      

    #define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)

      将一个信号量初始化为1

    3.DECLARE_MUTEX_LOCKED(name)

      

    #define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)

      将一个信号量初始化为0

    注意:1表示信号量打开,可以访问。0表示锁定。

     在运行的过程中初始化信号量:

    static inline void init_MUTEX(struct semaphore *sem)
    static inline void init_MUTEX_LOCKED(struct semaphore *sem)

    down函数作用是减小信号量的值。

    static inline void down(struct semaphore * sem)//减小信号量的值,在必要的时候一直等待。
    static inline int down_interruptible (struct semaphore * sem)//与down效果一样,只是说操作是可以中断的。
    static inline int down_trylock(struct semaphore *sem)//函数中没有调用might_sleep(); 所以不会休眠,调用时会立即返回
  • 相关阅读:
    ajax小白理解
    Once more
    win滚动条样式修改
    NOIP2018游记
    Stirling数笔记
    【Start From Here】HNOI2018 滚粗记
    6面相对象
    5方法定义及调用
    Java4数组
    Java3流程控制语句
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/10828712.html
Copyright © 2011-2022 走看看