Linux核心同步方法

2021-09-08 20:34:53 字數 826 閱讀 6397

1、原子操作,是其它同步方法的基礎。

2、自旋鎖,執行緒試圖獲取乙個已經被別人持有的自旋鎖,當前執行緒處於忙等待,占用cpu資源。

3、讀寫自旋鎖,根據通用性和針對性的特點,普通自旋鎖在特定場景下的表現會退化。因此,提供了讀寫自旋鎖,讀鎖可以加讀鎖,不能加寫鎖,寫鎖不能加任何鎖。

4、需要注意的幾項:

普通自旋鎖是不能遞迴的。讀鎖可以遞迴,寫鎖也不能遞迴。

表面上鎖的是**,實際上鎖的是共享資料。

使用讀寫鎖的時候,需要注意,讀鎖可以加讀鎖,多個執行緒都占用讀鎖,必須所有的執行緒都釋放,才能加上寫鎖,這往往會導致寫鎖長時間處於飢餓狀態。

5、自旋鎖存在的問題,執行緒試圖獲取乙個已經被別人持有的自旋鎖,當前執行緒處於忙等待,占用cpu資源。怎麼解決這個問題?

使用訊號量,訊號量是一種睡眠鎖。乙個任務試圖獲取被別人占有的訊號量,訊號量會將其推進乙個等待佇列,讓其睡眠,當請求的訊號量被釋放,處於等待佇列的任務被喚醒,並獲得訊號量。

6、需要注意的是,訊號量是一種睡眠鎖,但它本身也會帶有開銷,上下文切換,被阻塞的執行緒要換出換入,也即是說讓其睡眠並喚醒它,花費一定的開銷。如果每個執行緒鎖的時間很短,一般使用自旋鎖,忙等待的時間也很短。如果鎖的時間長,使用訊號量。

7、相比自旋鎖,訊號量還有更廣泛的用處,使用pv操作不僅能保護共享資源,還能夠控制同時訪問的數量,還能夠控制訪問順序。對於鎖,是誰加鎖誰釋放,而訊號量可以再不同執行緒之間pv操作。

8、考慮訊號量的一種特殊使用場景,可以睡眠的互斥鎖。建立的訊號量容量為1(也就是允許同時訪問的數量也就是1),可用數量為0,先進行v操作放入乙個資源,使可用資源為1。這就是互斥體,互斥體加鎖可以認為是p操作,然後做一些事情,然後解鎖,也就是v操作。

Linux核心同步方法 互斥鎖

互斥體 互斥 指的是任何可以睡眠的強制互斥鎖,比如計數是1的訊號量。也就是說,互斥體是一種互斥訊號。互斥在核心中對應資料結構互斥,其行為和使用計數為1的訊號量類似,因為是直接呼叫的訊號量的操作介面,實現更高效,而且使用限制更強。也就是乙個簡化版的訊號量,因為不需要管理任何使用計數。define mu...

Linux核心同步

在linux核心裡記憶體可以和硬碟空間通用的,當記憶體利用很少時,資料可以存到記憶體裡,反之硬碟空間可以用來當記憶體用但是有個共同點資料總是現在記憶體裡操作再寫回到硬碟上的。由於這個原因,塊儲存裝置被當成後備儲存器。linux 提供了兩種操作的方法 1 後台程序不停的檢查系統記憶體週期性的寫操作 2...

Linux核心 同步

核心同步方法 2.自旋鎖 3.訊號量 4.互斥體 5.順序和屏障 6.其它 1.從2.0開始,linux開始支援多處理器 2.所謂臨界區就是訪問和操作共享資料的 段 3.我們應該不讓兩個執行執行緒在同乙個臨界區同時執行 4.i 的機器指令步驟 5.核心為我們實現了一些原子操作的介面 6.乙個鎖被高度...