自己看了半天ldd3關於自旋鎖的部分,開始很是迷惑,慢慢想明白了,分享一下自己的理解.
1.自旋鎖為什麼要禁止搶占?
加入程序a擁有自旋鎖的過程中被b搶占,而b企圖獲取同乙個自旋鎖,理想情況下b也要白白耗盡自己的時間片,等待a釋放自旋鎖。糟糕的情況是系統死鎖或者崩潰。
2.使用自旋鎖前為什麼要禁止中斷?
首先,並不是所有情況下需要這麼做。只有當程序上下文和中斷上下文中都會使用同乙個自旋鎖時才需要禁止中斷。
假如程序a獲取自旋鎖之後,中斷b發生,如果b企圖獲取a擁有的自旋鎖,b就會一直自旋下去,非中斷**沒有機會獲得這個cpu.因為中斷程式執行期間無法進行程序切換。
3.獲得自旋鎖之後為什麼不能阻塞?
程序阻塞將會導致核心搶占,另乙個程序被呼叫。另乙個程序可能企圖獲取同乙個自旋鎖。這會引起第一條上所說的問題。
自旋鎖 spinlock 理解
自旋鎖spinlock是一種對臨界資源進行互斥手訪問的典型手段,其名稱源於他的工作方式。為了獲得乙個自旋鎖,在某cpu上執行的 需先執行乙個原子操作,該操作測試並設定test and set某個記憶體變數,由於他是原子操作,所以在該操作完成之前其它執行單元不可能訪問這個記憶體變數。如果測試結果表明鎖...
Linux 核心自旋鎖
現在很多cpu都是幾核幾核的了,如果有乙個變數a,cpu x正在訪問,突然cpu y也過來訪問他,這時候就可能出現問題,因為這個a非常重要,可能導致系統崩潰,中斷異常等。我們來看之前說的tp驅動裡面的 void gtp irq enable struct goodix ts data ts spin...
Linux 核心的排隊自旋鎖
引言 自旋鎖 spinlock 是一種 linux 核心中廣泛運用的底層同步機制。自旋鎖是一種工作於多處理器環境的特殊的鎖,在單處理環境中自旋鎖的操作被替換為空操作。當某個處理器上的核心執行執行緒申請自旋鎖時,如果鎖可用,則獲得鎖,然後執行臨界區操作,最後釋放鎖 如果鎖已被占用,執行緒並不會轉入睡眠...