Linux核心 什麼是自旋鎖

2021-10-10 18:51:01 字數 587 閱讀 3769

linux核心最常見的鎖是自旋鎖(spin lock)。自旋鎖最多只能被乙個可執行執行緒持有。

如果乙個執行緒試圖獲得乙個被已經持有的自旋鎖,那麼該執行緒就會一直進行忙 迴圈---旋轉---等待鎖重新可用。

要是鎖未被爭用,請求鎖的執行執行緒便能立即得到他,繼續執行。

在任意時間,自旋鎖都可以防止多於乙個的執行執行緒同時進入臨界區。

自旋鎖相當於在坐在門外等裡面的夥伴出來,並把鑰匙交給你。

如果你到了門口,發現裡面沒有人,可以直接抓了鑰匙進房間。如果你到了門口,發現裡面有人,就必須在門外等待鑰匙,並不斷的檢查房間裡面是否還有人。

當房間為空的時候,你就可以抓鑰匙進入。正式因為有了鑰匙(相當於自旋鎖),才允許一次只有乙個人(相當於執行執行緒)進入房間(相當於臨界區)。

乙個被爭用的自旋鎖使得請求它的執行緒在等待鎖重新可用時自旋(特別浪費處理器時間)。所以自旋鎖不應該被長時間持有。

事實上,這點正是使用自旋鎖的初衷,在短期間進行輕量級加鎖。

持有自旋鎖的時間最好小於完成兩次上下文切換的耗時。

因為自旋鎖在同一時刻至多被乙個執行緒持有,所以乙個時刻只能有乙個執行緒位於臨界區內,這就為多處理器機器提供了防止併發訪問所需的保護機制。

Linux 核心自旋鎖

現在很多cpu都是幾核幾核的了,如果有乙個變數a,cpu x正在訪問,突然cpu y也過來訪問他,這時候就可能出現問題,因為這個a非常重要,可能導致系統崩潰,中斷異常等。我們來看之前說的tp驅動裡面的 void gtp irq enable struct goodix ts data ts spin...

核心 自旋鎖

自旋鎖用於多處理器環境下保護資料。如果核心發現資料未鎖,就獲取鎖並執行 如果資料被鎖,就一直旋轉 反覆執行一條指令 自旋鎖在單處理器環境下 非搶占式核心 下,不起作用 單處理器搶占式核心的情況下,自旋鎖起到禁止搶占的作用。注釋 核心搶占 可搶占式核心 即當程序位於核心空間時,有乙個更高優先順序的任務...

Linux 核心的排隊自旋鎖

引言 自旋鎖 spinlock 是一種 linux 核心中廣泛運用的底層同步機制。自旋鎖是一種工作於多處理器環境的特殊的鎖,在單處理環境中自旋鎖的操作被替換為空操作。當某個處理器上的核心執行執行緒申請自旋鎖時,如果鎖可用,則獲得鎖,然後執行臨界區操作,最後釋放鎖 如果鎖已被占用,執行緒並不會轉入睡眠...