init_MUTEX与sema_init函数【转】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
init_MUTEX与sema_init函数【转】
在编译
2.6.25及以后的linux内核版本废除了init_MUTEX函数
新版本使⽤sema_init函数
平台:X86 32位
内核:2.6.24
定义:
点击(此处)折叠或打开
1. static inline void init_MUTEX (struct semaphore *sem)
2. {
3. sema_init(sem, 1);
4. }
说明:Init_MUTEX()函数初始化信号量为互斥量。
互斥量为信号量的特例,它可以防⽌数据被两个不同系统调⽤读写。
sema_init (sem, 1) 定义为:
点击(此处)折叠或打开
1. static inline void sema_init (struct semaphore *sem, int val)
2. {
3. /*
4. * *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val);
5. *
6. * i'd rather use the more flexible initialization above, but sadly
7. * GCC 2.7.2.3 emits a bogus warning. EGCS doesn't. Oh well.
8. */
9. atomic_set(&sem->count, val);
10. sem->sleepers = 0;
11. init_waitqueue_head(&sem->wait);
12. }
sleepers : 指定了允许进⼊等待进⼊临界区的进程数,这⾥初始化为 0 。
init_waitqueue_head() : 初始化⼀个等待队列头。
这样不难得出,废除 init_MUTEX 后,将原来使⽤ init_MUTEX(sem)的地⽅统统替换为sema_init(sem, 1); 即可。