自旋鎖spinlock剖析與改進

2021-08-02 13:48:49 字數 905 閱讀 1545

自旋鎖spinlock剖析與改進

原文:1, spinlock介紹

spinlock又稱自旋鎖,執行緒通過busy-wait-loop的方式來獲取鎖,任時刻只有乙個執行緒能夠獲得鎖,其他執行緒忙等待直到獲得鎖。spinlock在多處理器多執行緒環境的場景中有很廣泛的使用,一般要求使用spinlock的臨界區盡量簡短,這樣獲取的鎖可以盡快釋放,以滿足其他忙等的執行緒。spinlock和mutex不同,spinlock不會導致執行緒的狀態切換(使用者態->核心態),但是spinlock使用不當(如臨界區執行時間過長)會導致cpu busy飆高。

2, spinlock與mutex對比

2.1,優缺點比較

spinlock不會使執行緒狀態發生切換,mutex在獲取不到鎖的時候會選擇sleep。

mutex獲取鎖分為兩階段,第一階段在使用者態採用spinlock鎖匯流排的方式獲取一次鎖,如果成功立即返回;否則進入第二階段,呼叫系統的futex鎖去sleep,當鎖可用後被喚醒,繼續競爭鎖。

spinlock優點:沒有昂貴的系統呼叫,一直處於使用者態,執行速度快。

spinlock缺點:一直占用cpu,而且在執行過程中還會鎖bus匯流排,鎖匯流排時其他處理器不能使用匯流排。

mutex優點:不會忙等,得不到鎖會sleep。

mutex缺點:sleep時會陷入到核心態,需要昂貴的系統呼叫。

2.2,使用準則

spinlock使用準則:臨界區盡量簡短,控制在100行**以內,不要有顯式或者隱式的系統呼叫,呼叫的函式也盡量簡短。例如,不要在臨界區中呼叫read,write,open等會產生系統呼叫的函式,也不要去sleep;strcpy,memcpy等函式慎用,依賴於資料的大小。

自旋鎖 spinlock 理解

自旋鎖spinlock是一種對臨界資源進行互斥手訪問的典型手段,其名稱源於他的工作方式。為了獲得乙個自旋鎖,在某cpu上執行的 需先執行乙個原子操作,該操作測試並設定test and set某個記憶體變數,由於他是原子操作,所以在該操作完成之前其它執行單元不可能訪問這個記憶體變數。如果測試結果表明鎖...

執行緒同步 自旋鎖 SpinLock

自旋鎖 spinlock 是指當乙個執行緒在獲取鎖的時候,如果鎖已經被其它執行緒獲取,那麼該執行緒將迴圈等待,然後不斷的判斷鎖是否能夠被成功獲取,直到獲取到鎖才會退出迴圈。什麼情況下使用自旋鎖 自旋鎖非常有助於避免阻塞,但是如果預期有大量阻塞,由於旋轉過多,您可能不應該使用自旋鎖。當鎖是細粒度的並且...

不可睡眠鎖 自旋鎖spinlock編碼學習

開源力量學習筆記 自旋鎖 spinlock 簡介 自旋鎖是核心的一種同步機制,在同一時刻只能被最多乙個核心任務持有,所以乙個時刻只有乙個執行緒允許存在於臨界區中。核心可以通過自旋鎖占有某些資源,直到使用完後再釋放鎖。如果該資源已經被其他的任務占有了,那核心會不斷等待,直到獲得該資源。這點可以應用在多...