init_MUTEX 與 sema_init 函數【轉】


轉自: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
定義
: 

點擊(此處)折疊或打開

  1. static inline void init_MUTEX (struct semaphore *sem) 
  2.         sema_init(sem, 1); 
  3. }

說明: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); 即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM