CAS和鎖的相關面試題

2022-09-08 22:15:29 字數 2546 閱讀 5038

cas 鎖

鎖的四種狀態和公升級

鎖的四種狀態:無鎖、偏向鎖、輕量級鎖和重量級鎖

無鎖

無鎖就是沒有真正意義上的上鎖,所有的執行緒還是能訪問並修改同乙個資源,但是通過演算法控制,實現同時只有乙個執行緒修改成功。cas原理及應用即是無鎖的實現。無鎖無法全面代替有鎖,但無鎖在某些場合下的效能是非常高的。

比如:cas全稱 compare and swap(比較與交換),是一種無鎖演算法。

在不使用鎖的情況下(沒有執行緒被阻塞),實現多執行緒的變數同步。

cas演算法主要涉及到3個運算元:

①需要進行讀寫操作的值 v

②判斷是否更新的比較值 a

③需要替換值v寫入新的值 b

在最開始將v賦值給a,再進行資料操作生成b,需要更新v之前,

比較一下a是否還與v相等,相等說明資料未變化,執行更新操作,

不相等,則更新不能完成。

cas全稱 compare and swap(比較與交換),是一種無鎖演算法。

在不使用鎖的情況下(沒有執行緒被阻塞),實現多執行緒的變數同步。

cas演算法主要涉及到3個運算元:

①需要進行讀寫操作的值 v

②判斷是否更新的比較值 a

③需要替換值v寫入新的值 b

在最開始將v賦值給a,再進行資料操作生成b,需要更新v之前,

比較一下a是否還與v相等,相等說明資料未變化,執行更新操作,

不相等,則更新不能完成。

偏向鎖

偏向鎖是指一段同步**一直只被乙個執行緒所訪問,那麼該執行緒會自動獲取鎖,降低獲取鎖的成本。

> 例如:家裡只有乙個碗,但也只有我乙個人需要乙個碗吃飯,所以不存在爭搶,這就是偏向鎖

因為在大多數情況下,鎖總都是被同乙個執行緒多次反覆獲得,不存在多執行緒競爭,所以就出現了偏向鎖。目標就是在只有乙個執行緒執行同步**塊時能夠提高效能。

偏向鎖只有遇到其他執行緒嘗試競爭偏向鎖時,持有偏向鎖的執行緒才會釋放鎖,執行緒不會主動釋放偏向鎖。

> 例如:我家還是只有乙個碗,當我朋友來我家和我一起吃飯,這時候就有兩個人,只有這乙個碗吃飯,偏向鎖公升級

偏向鎖的撤銷,需要等待全域性安全點(在這個時間點上沒有位元組碼正在執行),它會首先暫停擁有偏向鎖的執行緒,判斷鎖物件是否處於被鎖定狀態。撤銷偏向鎖後恢復到輕量級鎖(標誌位為「00」)的狀態。 **當進入偏向鎖的時候 先進行執行緒id判斷,如果是同乙個執行緒,那不會進行鎖的公升級,如果執行緒的id不同那麼會 進行執行緒的競爭,這時候會進行鎖公升級;**

輕量級鎖

是指當鎖是偏向鎖的時候,被另外的執行緒所訪問,偏向鎖就會公升級為輕量級鎖,其他執行緒會通過自旋的形式嘗試獲取鎖,不會阻塞,從而提高效能。

如果這個更新動作成功了,那麼這個執行緒就擁有了該物件的鎖,並且物件mark word的鎖標誌位設定為「00」,表示此物件處於輕量級鎖定狀態。

如果輕量級鎖的更新操作失敗了,虛擬機器首先會檢查物件的mark word是否指向當前執行緒的棧幀,如果是就說明當前執行緒已經擁有了這個物件的鎖,那就可以直接進入同步塊繼續執行,否則說明多個執行緒競爭鎖。

若當前只有乙個等待執行緒,則該執行緒通過自旋進行等待。但是當自旋超過一定的次數,或者乙個執行緒在持有鎖,乙個在自旋,又有第三個來訪時,輕量級鎖公升級為重量級鎖。

重量級鎖

> 當我和女朋友都很餓的時候,我女朋友覺得我吃的太慢了,不想等我吃完,這時候就會去爭搶這唯一的乙個碗先吃飯,這是重量級鎖狀態

公升級為重量級鎖時,鎖標誌的狀態值變為「10」,此時mark word中儲存的是指向重量級鎖的指標,此時等待鎖的執行緒都會進入阻塞狀態。

這裡只有如果深入了解 會涉及到 使用者態(輕量級問題)和核心態(重量級問題、作業系統)的問題!!!

## 總結

> 整體的鎖狀態公升級流程是:無鎖-> 偏向鎖 -> 輕量級鎖 -> 重量級鎖

鎖狀態的改變是根據競爭激烈程度進行的,在幾乎無競爭的條件下,會使用偏向鎖,在輕度競爭的條件下,會由偏向鎖公升級為輕量級鎖, 在重度競爭的情況下,會公升級到重量級鎖。

偏向鎖通過對比mark word 解決加鎖問題,避免執行cas操作。

輕量級鎖是通過cas操作和自旋來解決加鎖問題,避免執行緒阻塞和喚醒帶來的效能影響。

重量級鎖是將除擁有鎖的執行緒之外的執行緒全部阻塞。

那cas是什麼? cas中會遇見哪些問題 如何解決?

cas即比較並替換,是一種實現併發演算法時常用到的技術

裡面有三個運算元:記憶體值v、舊的預期值a、要修改的值b;

當預期值a和記憶體值v相同時,才會將記憶體值修改為b並返回true,否則什麼都不做並返回false。

cas存在aba問題,解決方案是:可以對每個值新增乙個版本號來判斷,cas只是一種思想

使用cas+版本號進行解決,對乙個資料如果修改了的話,那麼版本號就進行+1,然後再迴圈比較的時候,不僅僅比較值再根據版本號就可以解決aba問題。

如果版本號相同我們就可以加入時間戳 當版本號和時間戳都相同時 才會進行資料的改變!

面試題 CAS單點登入

單點登入 single sign on,簡稱sso,sso使得在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。cas框架 cas central authentication service,即 統一認證服務 是實現sso單點登入的框架。cas分為兩部分,cas server...

面試題相關

一些位址 osi七層功能及協議 資料鏈路層是如何定址的?傳送方 已知接收方ip arp 接收方mac位址 交換機尋找該mac位址所在埠,把幀往這個埠 mac通過rarp轉為ip位址。可靠通訊是靠哪一層來完成的?網路層 tcp協議 100base t 100mbps,baseband,雙絞線對。簡而言...

面試題 HTTP和HTTPS相關

1.http請求的步驟?以向 www.baidu.com 傳送http請求為例 2.https請求的步驟 握手的過程 https的請求過程如下 3.https為什麼是安全的?https相對於http協議,加入了tls ssl,它的全稱為安全傳輸層協議,是介於tcp和http之間的一層安全協議。tls...