Linux內核與驅動開發學習總結:自旋鎖和信號量(五)

1、自旋鎖和信號量

   使用自旋鎖的進程不能睡眠,使用信號量的進程可以睡眠。中斷服務例程中的互斥使用的是自旋鎖,原因是在中斷處理例程中,硬中斷是關閉的,這樣會丟失可能到來的中斷。

2、RCU 鎖

http://blog.sina.com.cn/s/blog_6d7fa49b01014q9s.html

討論的內容包括原子操作;自旋鎖,內存屏障;讀寫自旋鎖,順序鎖;信號量,讀寫信號量,完成量;互斥量;RCU機制;BKL(大內核鎖)

通過上述討論的一些內容,我們可以總結得到以下一些基本觀點: 原子操作對整數操作,自旋鎖和信號量應用較爲廣泛。 當臨界區小應選擇自旋鎖,反之,則應選擇信號量。 關於信號量的選擇問題:信號量是針對進程級的,它在內核中以進程方式運行,故它一般的使用條件是當申請信號量的進程需佔用資源較長時間時。 讀寫自旋鎖和讀寫信號量條件相對於自旋鎖和信號量來說放寬不少,這一點可從它們的定義得出。 RCU機制的應用目前越來越廣。 內存屏障函數使用起來較爲複雜,而且多數情況下需要和具體的體系結構相關,故而一般不建議使用。( 自旋不會睡眠)



發佈了11 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章