誰能解答一下Linux核心的 kfifo環形佇列實現,有了自旋鎖,為什麼還要加上記憶體屏障呢?

時間 2021-07-02 20:15:54

1樓:Jack

自旋鎖只保證臨界區不會被並行執行,記憶體屏障用來保證記憶體序,也就是記憶體可見性,在改變下標之前需要把buffer可見性重新整理到其他cpu,注意我們平時用的poisx mutex它不僅有鎖的作用,還保證了記憶體序。

*/#define

__lll_lock_asm_start

"cmpl $0, %%gs:%P6

\n\t"\

"je 0f

\n\t"\

"lock\n"

\//!!!!!!lock 指令34;0:\tcmpxchgl %1, %2\n\t"//LLL_PRIVATE為0,所以不會走第乙個分支,走第二個分支#define lll_lock(futex, private) \ (voidint ignore1, ignore2if (__builtin_constant_p (private) && (private) == LLL_PRIVATEasm __volatile (__lll_lock_asm_start34;jz 18f\n\t൪1:

\tleal %2, %%ecx\n൪2:\tcall __lll_lock_wait_private\n൪18:൪=a" (ignore1), "=c" (ignore2), "=m" (futex34;0" (0), "1" (1), "m" (futex34;i" (MULTIPLE_THREADS_OFFSET34;memory"指令影響記憶體elseint ignore3asm __volatile (__lll_lock_asm_start34;jz 18f\n\t൪1:

\tleal %2, %%edx\n൪0:\tmovl %8, %%ecx\n൪2:\tcall __lll_lock_wait\n൪18:

൪=a" (ignore1), "=c" (ignore234;=m" (futex), "=&d" (ignore334;1" (1), "m" (futex34;i" (MULTIPLE_THREADS_OFFSET), "0" (034;g" ((int) (private34;memory"

看到lock指令了麼

誰能解答一下我關於跳投的疑問?

polochow 最近感覺投籃已有大成,我建議你不要把注意力放在怎麼跳上面,你把注意力放在動作順暢度上面,即屈膝微蹲 腿發力 腰發力 肩肘上抬 投籃。因為在不同的距離出手點是不一樣的,譬如我在投超遠三分時是起跳同時出手,但我投中投則是最高點出手,重點是要保證所有出手動作手型的一致性。還有一點是投籃時...

電子簽名安全性問題誰能解答一下?

微籤 合同電子簽章和合同管理 從廣義上講,電子簽章不僅包括我們通常意義上講的 非對稱性金鑰加密 也包括計算機口令 生物筆跡辨別 指紋識別,以及新近出現的眼虹膜透視辨別法 面紋識別等。而電子簽章技術作為目前最成熟的 數字簽章 是以公鑰及金鑰的 非對稱型 密碼技術製作的。以 微籤 為例,我們從以下幾個方...

玄武門有太多的疑問,誰能解答一下?

tom 這個。目前鍵史圈基本有定論了吧。真實的歷史 或許因為有人改史而永遠無法還原,但 歷史的真實 還是可以分析的。所謂 歷史的真實 即當時的各種條件下最有可能發生的時。李二無非就是發動了一場政變而已,與高平陵三千死士並無二致。李二先裝死,穩住李淵李大,要求辯冤,然後先入宮控制李淵,打個時間差伏擊李...