自旋鎖
1.什麼是自旋鎖?
當乙個執行緒需要在獲取鎖的時候,此時正好有其他執行緒占用著鎖,那麼此時該執行緒將會進入迴圈等待模式,直到成功獲取到鎖才會退出迴圈,因此稱為自旋鎖。
2.什麼時候用到自旋鎖?自旋鎖的適用場景?
1)單核處理器
2)多核處理器
3.自旋鎖的優缺點?
自旋鎖可以避免上下文切換,但是由於獲取到鎖的時間不確定,當獲取鎖需要時間太長的時候,自旋鎖的死迴圈等待模式會造成cpu浪費,導致效能緩慢。
4.自旋鎖的特點?
1)被自旋鎖保護的臨界區**執行時不能睡眠。單核處理器下,獲取到鎖的執行緒睡眠,若恰好此時cpu排程的另乙個執行執行緒也需要獲取這個鎖,則會造成死鎖;多核處理器下,若想獲取鎖的執行緒在同乙個處理器下,同樣會造成死鎖,若位於另外的處理器,則會長時間占用cpu等待睡眠的執行緒釋放鎖,從而浪費cpu資源。
2)被自旋鎖保護的臨界區**執行時不能被其他中斷打斷。
3)被自旋鎖保護的臨界區**在執行時,核心不能被搶占。
更過鎖型別知識可以檢視文件:
java鎖 自旋鎖
什麼是自旋鎖?所謂自旋鎖是指不會引起呼叫者睡眠,若鎖資源被其他執行緒占有,則會迴圈檢查鎖資源的佔有者是否已經釋放鎖。總結下來自旋鎖就是原子操作 自迴圈 如何實現自旋鎖?自旋鎖的原理是通過cas實現,其中cas是比較並交換,本身是使用它的原子性的compareandset方法。cas 操作中包含三個運...
Java輕量鎖 偏向鎖 自旋鎖 重量鎖
巨集觀上分為 悲觀鎖 樂觀鎖 悲觀鎖 認為寫多讀少,每次都會上鎖。樂觀鎖 讀多寫少。自旋鎖 如果持有鎖的執行緒能在很短的時間內釋放資源,那麼那些等待競爭鎖的執行緒就不需要做核心態與使用者態之間的切換進入阻塞狀態,只需要等一等 自旋 等待有鎖的執行緒釋放鎖後即可立即獲取鎖,避免使用者執行緒與核心的切換...
自旋鎖以及可重入自旋鎖
首先是簡單的自旋鎖 實現 package org.cc.concur public class mylock private boolean islocked false public synchronized void lock throws interruptedexception islock...