轉自:http://blog.chinaunix.net/uid-7332782-id-3211627.html
2.6.25及以后的linux內核版本廢除了init_MUTEX函數
新版本使用sema_init函數
點擊(此處)折疊或打開
- 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); 即可