Liunx鎖機制淺析

Liunx鎖機制:原子操作、互斥鎖、信號量、大內核鎖、自旋鎖,各自的特點,區別和聯繫。

鎖的作用:使程序以串行方式對資源進行訪問

A:原子操作:不能被分割的指令(對整數、對位進行操作)

   一般用於增減變量值,操作簡單,單條指令即可完成。

B:自旋鎖:Linux中最常見的鎖機制,它最多隻能被一個可執行線程持有,用於處理較爲複雜的情形,但由於請求它的線程在等待鎖重新可用時處於忙等待狀態,故自旋鎖一般用於短時期內進行輕量級加鎖,能夠快速完成臨界區,並釋放鎖。自旋鎖不可遞歸

C:讀-寫自旋鎖:將鎖的用途明確地分爲讀取和寫入兩個場景,

D:信號量:類似睡眠鎖,請求它的線程在等待鎖可用時會處理休眠狀態,加入等待隊列,待信號量可用時再被喚醒。適用於鎖會被長時間持有的情況。它可以同時允許任意數量的鎖持有者,而自旋鎖在一個時刻只能允許一個任務持有它。

E:讀-寫信號量:與讀-寫自旋鎖類似,只有唯一一個寫者能獲得鎖。

F:互斥體:信號量的特例化,使用技術永遠爲1.

G:大內核鎖:全局自旋鎖,可以遞歸,可以睡眠。

H:順序鎖:用於讀寫共享數據,常用於讀者較多,寫者較少的情況,通過維持一個序列計數器來判定是否有寫操作存在。

參考文獻:

《Linux 內核設計與實現 第三版》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章