執行緒同步 自旋鎖 SpinLock

2022-01-15 19:48:51 字數 1067 閱讀 1540

自旋鎖(spinlock):

是指當乙個執行緒在獲取鎖的時候,如果鎖已經被其它執行緒獲取,那麼該執行緒將迴圈等待,然後不斷的判斷鎖是否能夠被成功獲取,直到獲取到鎖才會退出迴圈。

什麼情況下使用自旋鎖:

自旋鎖非常有助於避免阻塞,但是如果預期有大量阻塞,由於旋轉過多,您可能不應該使用自旋鎖。當鎖是細粒度的並且數量巨大(例如鏈結的列表中每個節點乙個鎖)時以及鎖保持時間總是非常短時,旋轉可能非常有幫助。

短時間鎖定的情況下,自旋鎖(spinlock)更快。(因為自旋鎖本質上不會讓執行緒休眠,而是一直迴圈嘗試對資源訪問,直到可用。所以自旋鎖線程被阻塞時,不進行執行緒上下文切換,而是空轉等待。對於多核cpu而言,減少了切換執行緒上下文的開銷,從而提高了效能。)

spinlock和lock的區別:

spinlock,自旋鎖。嘗試獲取該鎖的執行緒持續不斷的check是否可以獲得。此時執行緒仍然是啟用狀態,只是在空轉,浪費cpu而已。但是spinlock避免了執行緒排程和上下文切換,如果鎖的時間極短的話,使用該鎖反而效率會高。

而lock是執行緒被block了。這將引起執行緒排程和上下文切換等行為。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.runtime.interopservices;

using

system.text;

using

system.threading;

using

system.threading.tasks;

namespace

spinlock

}finally

}public

static

void

dowork2()

}finally

}static

void main(string

args)

}}

自旋鎖 spinlock 理解

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

執行緒同步 多執行緒自旋鎖

短時間鎖定的情況下,自旋鎖 spinlock 更快。因為自旋鎖本質上不會讓執行緒休眠,而是一直迴圈嘗試對資源訪問,直到可用。所以自旋鎖線程被阻塞時,不進行執行緒上下文切換,而是空轉等待。對於多核cpu而言,減少了切換執行緒上下文的開銷,從而提高了效能。class program spinlock是n...

自旋鎖spinlock剖析與改進

自旋鎖spinlock剖析與改進 原文 1,spinlock介紹 spinlock又稱自旋鎖,執行緒通過busy wait loop的方式來獲取鎖,任時刻只有乙個執行緒能夠獲得鎖,其他執行緒忙等待直到獲得鎖。spinlock在多處理器多執行緒環境的場景中有很廣泛的使用,一般要求使用spinlock的...