各種鎖概述

2021-10-18 18:25:51 字數 1025 閱讀 6960

重量級鎖

程序或者執行緒想訪問某個資源,如果沒有執行緒訪問,則占有這個資源,且加上鎖,等用完之後再釋放掉鎖。如果這個資源被其他執行緒占有,就會堵塞,直到其他執行緒讓出該資源並喚醒該執行緒。

自旋鎖

把執行緒從執行態轉為阻塞態,會儲存上下文,涉及到核心態到使用者態的轉換,非常浪費時間,被其他執行緒喚醒,也很消耗時間。在重量級鎖的情況下,假如該執行緒訪問某個資源,該資源別占用,所以就得轉化為阻塞,但可能0.001秒之後,占有該資源的執行緒就會釋放掉鎖。所有如果多等一點時間,浪費的時間反而會更小,從而出現了自旋鎖。如果資源被占有,等待一定時間,如果還沒有執行緒讓出,則進入阻塞狀態。

自適應自旋鎖

自適應自旋鎖是 自旋鎖的改進版,不同的執行緒對資源的訪問程度不同,如果你給每個執行緒都設定相同的等待時間反而會造成時間浪費。針對不同的執行緒,自己調節等待時間。比如,某個執行緒總訪問該資源,那麼等待時間就長一些。

以上三種鎖也就叫做悲觀鎖,總擔心別人會和自己搶占資源,所以提前加上一把鎖。

輕量級鎖

作業系統加鎖解鎖非常耗費時間,而採用cas(compare and swap) 給資源做標記,用乙個變數標記該資源是否正被使用,用的時候加上正在使用的標記,不用的時候改變標記,從而減少時間。這是在沒人搶資源的情況下使用,一旦發生資源爭端,就會由輕量級鎖變成重量級鎖。所以說輕量解鎖用在發生競爭下的情況下。

偏向鎖

偏向鎖是輕量級鎖的加強版,變得更隨意啦,認為沒有人和我爭奪資源,在進入資源的時候,使用cas機制,加上我正在使用的表示和現成的id,推出的時候不改變狀態,等下次在使用的時候,比較一下id是否和自己一樣,如果一樣就接著使用。不一樣時候有人動過了,就要變為輕量級鎖,所以更適合乙個執行緒執行的情況。

這兩種也叫做悲觀鎖,認為資源不會被別人占有。

注意偏向鎖、輕量級鎖、重量級鎖等都是jdk 1.6以後引入的。

mysql spring鎖 MySQL鎖概述

鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。在資料庫中,除傳統的計算資源 如cpu ram i o等 的爭用以外,資料也是一種供許多使用者共享的資源。如何保證資料併發訪問的一致性 有效性是所有資料庫必須解決的乙個問題,鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。從這個角度來說,鎖對資料...

簡述各種鎖

樂觀鎖 樂觀鎖,訪問資料時不提前加鎖,也就是說在乙個使用者在修改資料未進行提交的時候,其他人檢視其資料可以看到他未提交資料。若他的操作進行了回滾那麼另乙個看到的資料就為幻讀。悲觀鎖 悲觀鎖,在乙個使用者讀取資料未進行提交時,其他客戶查詢看到的是其原有資料,也沒有辦法對其資料進行修改。只有在使用者提交...

MySQL鎖概述 MyISAM 表鎖

相對其他資料庫而言,mysql的鎖機制比較簡單,其最顯著的特點是不同的儲存引擎支援不同的鎖機制。比如,myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支...