init_MUTEX 与 sema_init 函数【转】
2016-07-27 13:56
281 查看
转自:http://blog.chinaunix.net/uid-7332782-id-3211627.html
在编译
Linux设备驱动程序学习(1)-字符设备驱动程序
中scull.c程序时,报错:
/linux-2.6.35/mytest/scull/scull/scull.c: 在函数‘scull_init_module’中:
/linux-2.6.35/mytest/scull/scull/scull.c:305:3: 错误:隐式声明函数‘init_MUTEX’
搜索得到结果如下:
2.6.25及以后的linux内核版本废除了init_MUTEX函数
新版本使用sema_init函数
平台:X86 32位
内核:2.6.24
定义:
点击(此处)折叠或打开
static inline void init_MUTEX (struct semaphore *sem)
{
sema_init(sem, 1);
}
说明:Init_MUTEX()函数初始化信号量为互斥量。 互斥量为信号量的特例,它可以防止数据被两个不同系统调用读写。
sema_init (sem, 1) 定义为:
点击(此处)折叠或打开
static inline void sema_init (struct semaphore *sem, int val)
{
/*
* *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val);
*
* i'd rather use the more flexible initialization above, but sadly
* GCC 2.7.2.3 emits a bogus warning. EGCS doesn't. Oh well.
*/
atomic_set(&sem->count, val);
sem->sleepers = 0;
init_waitqueue_head(&sem->wait);
}
sleepers : 指定了允许进入等待进入临界区的进程数,这里初始化为 0 。
init_waitqueue_head() : 初始化一个等待队列头。
这样不难得出,废除 init_MUTEX 后,将原来使用 init_MUTEX(sem)的地方统统替换为sema_init(sem, 1); 即可
在编译
Linux设备驱动程序学习(1)-字符设备驱动程序
中scull.c程序时,报错:
/linux-2.6.35/mytest/scull/scull/scull.c: 在函数‘scull_init_module’中:
/linux-2.6.35/mytest/scull/scull/scull.c:305:3: 错误:隐式声明函数‘init_MUTEX’
搜索得到结果如下:
2.6.25及以后的linux内核版本废除了init_MUTEX函数
新版本使用sema_init函数
平台:X86 32位
内核:2.6.24
定义:
点击(此处)折叠或打开
static inline void init_MUTEX (struct semaphore *sem)
{
sema_init(sem, 1);
}
说明:Init_MUTEX()函数初始化信号量为互斥量。 互斥量为信号量的特例,它可以防止数据被两个不同系统调用读写。
sema_init (sem, 1) 定义为:
点击(此处)折叠或打开
static inline void sema_init (struct semaphore *sem, int val)
{
/*
* *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val);
*
* i'd rather use the more flexible initialization above, but sadly
* GCC 2.7.2.3 emits a bogus warning. EGCS doesn't. Oh well.
*/
atomic_set(&sem->count, val);
sem->sleepers = 0;
init_waitqueue_head(&sem->wait);
}
sleepers : 指定了允许进入等待进入临界区的进程数,这里初始化为 0 。
init_waitqueue_head() : 初始化一个等待队列头。
这样不难得出,废除 init_MUTEX 后,将原来使用 init_MUTEX(sem)的地方统统替换为sema_init(sem, 1); 即可
相关文章推荐
- ubuntu 16.04安装PHPSTORM
- 利用JAVA创建简单的菜单界面
- android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)
- 7.2.2 插入排序之折半插入排序
- git学习 二(系统学习)
- Swift基础(三十)UISearchBar
- EntityFramework与Ado.net的对比——EF优势何在?
- Linux设备驱动之semaphore机制【转】
- VC开发ocx
- H264码率设置
- android之位置坐标
- Maven中央存储库
- 数据结构的理解
- ConcurrentHashMap实现原理--上
- Lightoj 1137 Expanding Rods (二分,数学)
- flask应用中取得config的配置
- JS中误用/g导致的正则test()无法正确重复执行
- 2015级成员博客地址
- ios终端使用brew安装工具
- gdb调试多进程和多线程命令