Linux 核心自旋鎖

2021-08-28 21:24:37 字數 531 閱讀 7983

現在很多cpu都是幾核幾核的了,如果有乙個變數a,cpu-x正在訪問,突然cpu-y也過來訪問他,這時候就可能出現問題,因為這個a非常重要,可能導致系統崩潰,中斷異常等。

我們來看之前說的tp驅動裡面的**

void gtp_irq_enable(struct goodix_ts_data *ts)

spin_unlock_irqrestore(&ts->irq_lock, irqflags);

}

在進行中斷操作的時候,用到了自旋鎖,就是擔心正在操作的時候又被呼叫,聽起來有點拗口,但是就是那麼一回事。

自旋鎖(spinlock)是用在多個cpu系統中的鎖機制,當乙個cpu正訪問自旋鎖保護的臨界區時,臨界區將被鎖上,其他需要訪問此臨界區的cpu只能忙等待,直到前面的cpu已訪問完臨界區,將臨界區開鎖。自旋鎖上鎖後讓等待執行緒進行忙等待而不是睡眠阻塞,而訊號量是讓等待執行緒睡眠阻塞。自旋鎖的忙等待浪費了處理器的時間,但時間通常很短,在1毫秒以下。

自旋鎖用於多個cpu系統中,在單處理器系統中,自旋鎖不起鎖的作用

核心 自旋鎖

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

Linux 核心的排隊自旋鎖

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

Linux核心 什麼是自旋鎖

linux核心最常見的鎖是自旋鎖 spin lock 自旋鎖最多只能被乙個可執行執行緒持有。如果乙個執行緒試圖獲得乙個被已經持有的自旋鎖,那麼該執行緒就會一直進行忙 迴圈 旋轉 等待鎖重新可用。要是鎖未被爭用,請求鎖的執行執行緒便能立即得到他,繼續執行。在任意時間,自旋鎖都可以防止多於乙個的執行執行...