使用信号量必须包含  <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 = ;
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(); 所以不会休眠,调用时会立即返回

最新文章

  1. Linux文件系统的实现
  2. restful 部署 PUT,DELETE 请求发生405 谓词Http不允许
  3. 安装R语言扩展包diveRsity-1
  4. 性能:CPU、Memory、耗电量
  5. ACM Steps 2.1.4
  6. mysql linux终端登陆
  7. 一个项目中哪些文件是要上传到 git上的,哪些是不必要的
  8. 【nodejs】关于 alert 和 document
  9. SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据
  10. vxworks一个超级奇怪的错误(parse error before `char')
  11. Optimal Milking
  12. ARM平台的内核模块编写与安装
  13. (转)set集合的应用
  14. 使用vue实现tab操作
  15. python语法_模块_os_sys
  16. git使用命令行拉取远程代码仓库中的分支至本地
  17. SpringBoot中自定义properties文件配置参数并带有输入提示
  18. mysql之CREATE DATABASE Syntax(创建数据库)
  19. Java如何在指定端口创建套接字?
  20. CRM rbac 组件的应用

热门文章

  1. PHP基础教程 10款人气暴涨的PHP开源工具
  2. 记一次创建svc代理失败
  3. HDU 6651 Final Exam
  4. 搭建一套简单的web服务器,记录实验过程
  5. C#中的事件委托
  6. 企业链表C语言实现
  7. LeetCode_1116.打印零与奇偶数(多线程)
  8. leetcode 590.N-ary Tree Postorder Traversal N叉树的后序遍历
  9. delphi 跨版本DLL调用嵌入窗体实现
  10. ES6中数组和对象的扩展运算符拷贝问题以及常用的深浅拷贝方法