天天看點

自旋鎖

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時會陷入到核心态,需要昂貴的系統調用。

繼續閱讀