java鎖的種類以及辨析(一) 自旋鎖

2021-09-21 18:22:24 字數 497 閱讀 4357

自旋鎖是採用讓當前執行緒不停地的在迴圈體內執行實現的,當迴圈的條件被其他執行緒改變時 才能進入臨界區。如下

public

class

spinlock

}public

void unlock (

)}

使用了cas原子操作,lock函式將owner設定為當前執行緒,並且**原來的值為空。unlock函式將owner設定為null,並且**值為當前執行緒。

當有第二個執行緒呼叫lock操作時由於owner值不為空,導致迴圈一直被執行,直至第乙個執行緒呼叫unlock函式將owner設定為null,第二個執行緒才能進入臨界區。

由於自旋鎖只是將當前執行緒不停地執行迴圈體,不進行執行緒狀態的改變,所以響應速度更快。但當執行緒數不停增加時,效能下降明顯,因為每個執行緒都需要執行,占用cpu時間。如果執行緒競爭不激烈,並且保持鎖的時間段。適合使用自旋鎖。

注:該例子為非公平鎖,獲得鎖的先後順序,不會按照進入lock的先後順序進行。

乙個關於自旋鎖 spin lock 問題的討論

前陣子有發短訊息問 在研究自旋鎖的時候,發現在 spin lock irq函式,也就是在自旋鎖中關閉中的這類函式中,既然已經關閉了本地中斷,再禁止搶占有沒有多餘。也就是說,既然本地中斷已經禁止了,在本處理器上是無法被打斷的,本地排程器也無法執行,也就不可以被本地排程程式排程出去.從spinlock設...

一種簡單的跨平台使用者態自旋鎖

前言 自旋鎖作為一種併發同步的手段,特別適用於競爭少和鎖時間短的情況,在驅動及核心 中經常被用到,本文講述一種適合使用者態程式的自旋鎖,支援win32 vc和linux gcc 4.1.2 平台,並提供了c語言的介面和實現,詳見下文。介面 1 ifdef cplusplus 2extern c sp...

Java互斥鎖的乙個簡單Demo

互斥鎖,常常用於多個執行緒訪問獨佔式資源,比如多個執行緒同時寫乙個檔案,雖然互斥訪問方式不夠高效,但是對於一些應用場景卻很有意義 標籤 無 沒有互斥鎖的情況 可以自己跑跑看執行結果 publicclasslockdemo system.out.println thread.currentthread...