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