2.6.25及以后的linux内核版本废除了init_MUTEX函数
新版本使用sema_init函数
平台:X86 32位内核:2.6.24定义:
说明:Init_MUTEX()函数初始化信号量为互斥量。 互斥量为信号量的特例,它可以防止数据被两个不同系统调用读写。 sema_init (sem, 1) 定义为:引用static inline void init_MUTEX (struct semaphore *sem) { sema_init(sem, 1); }
sleepers : 指定了允许进入等待进入临界区的进程数,这里初始化为 0 。init_waitqueue_head() : 初始化一个等待队列头。引用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); }
这样不难得出
废除 init_MUTEX 后
将原来使用 init_MUTEX(sem)的地方统统替换为sema_init(sem, 1); 即可