自旋鎖(spinlock):
是指當乙個執行緒在獲取鎖的時候,如果鎖已經被其它執行緒獲取,那麼該執行緒將迴圈等待,然後不斷的判斷鎖是否能夠被成功獲取,直到獲取到鎖才會退出迴圈。
什麼情況下使用自旋鎖:
自旋鎖非常有助於避免阻塞,但是如果預期有大量阻塞,由於旋轉過多,您可能不應該使用自旋鎖。當鎖是細粒度的並且數量巨大(例如鏈結的列表中每個節點乙個鎖)時以及鎖保持時間總是非常短時,旋轉可能非常有幫助。
短時間鎖定的情況下,自旋鎖(spinlock)更快。(因為自旋鎖本質上不會讓執行緒休眠,而是一直迴圈嘗試對資源訪問,直到可用。所以自旋鎖線程被阻塞時,不進行執行緒上下文切換,而是空轉等待。對於多核cpu而言,減少了切換執行緒上下文的開銷,從而提高了效能。)
spinlock和lock的區別:
spinlock,自旋鎖。嘗試獲取該鎖的執行緒持續不斷的check是否可以獲得。此時執行緒仍然是啟用狀態,只是在空轉,浪費cpu而已。但是spinlock避免了執行緒排程和上下文切換,如果鎖的時間極短的話,使用該鎖反而效率會高。
而lock是執行緒被block了。這將引起執行緒排程和上下文切換等行為。
usingsystem;
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的...