核心與驅動 03 自旋鎖

2021-10-02 20:00:19 字數 1376 閱讀 2201

使用佇列自旋鎖提高效能

使用如下**可以初始化乙個自旋鎖:

kspin_lock spinlock;

keinitlizespinlock

(&spinlock)

;//這個函式無返回值

//要注意,多執行緒使用自旋鎖同步時

//定義的自選鎖必須是乙個全域性的

//不然是沒有任何意義的

kspin_lock g_spinlock;

void mysafethreadproc

(pvoid context)

//普通的鍊錶插入函式如下

insertheadlist

(&mylisthead,

(plist_entry)

&myfileinfo)

;//加鎖後的操作方式如下:

exinterlockedinsertheadlist

(&mylisthead,

(plist_entery)

&myfileinfo,

&g_spinlock)

;//類似的還有乙個移除節點的操作也可以改變

myfileinfo=

exinterlockedremoveheadlist

(&mylisthead,

&g_spinlock)

;//都是在原先函式的基礎上加上了乙個自旋鎖引數,用於保證執行緒安全

void keacquireinstackqueuedspinlock

( in pkspin_lock spinlock,

in pklock_queue_handle lockhandle);

void kereleaseinstackqueuedspinlock

( in pklock_queue_handle lockhandle);

//下面介紹用法:

//1. 初始化乙個佇列自旋鎖

kspin_lock queuespinlock=

;keinitializespinlock

(&queuespinlock)

;//2. 佇列自旋鎖獲取

klock_queue_handle lockqueuehandle;

keacquireinstackqueuedspinlock

(&queuespinlock,

&lockqueuehandle)

;//do something...

//3. 釋放

kereleaseinstackqueuedspinlock

(&lockqueuehandle)

;

核心 自旋鎖

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

Linux 核心自旋鎖

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

核心自旋鎖與ARM同步原語

在閱讀linux核心 時,毫無疑問會遇到spin lock,下面談談我對於spin lock的arm原始碼分析。首先看一下spinlock t的結構 arm include asm spinlock types.h typedef struct tickets arch spinlock t inc...