使用佇列自旋鎖提高效能
使用如下**可以初始化乙個自旋鎖:
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...