對於樂觀鎖和悲觀鎖的理解

2021-10-18 19:25:35 字數 769 閱讀 1732

悲觀鎖(pessimistic lock):

定義:每次去拿資料的時候都認為別人會修改。所以每次在拿資料的時候都會上鎖。這樣別人想拿資料就被擋住,直到悲觀鎖被釋放。

互斥同步:互斥同步最主要的問題就是進行執行緒阻塞和喚醒所帶來的效能問題,因此這種同步也稱為阻塞同步(blocking synchronization)。從處理問題的方式上說,互斥同步屬於一種悲觀的併發策略,總是認為只要不去做正確的同步措施(例如加鎖),那就肯定會出現問題,無論共享資料是否真的會出現競爭,它都要進行加鎖(這裡討論的是概念模型,實際上虛擬機會優化掉很大一部分不必要的加鎖)、使用者態核心態轉換、維護鎖計數器和檢查是否有被阻塞的執行緒需要喚醒等操作。

樂觀鎖(optimistic lock):

定義:每次去拿資料的時候都認為別人不會修改。所以不會上鎖,但是如果想要更新資料,則會在更新前檢查在讀取至更新這段時間別人有沒有修改過這個資料。如果修改過, 則重新讀取,再次嘗試更新,迴圈上述步驟直到更新成功(當然也允許更新失敗的執行緒放棄操作)。

說到樂觀鎖,就必須提到乙個概念:cas,什麼是cas呢?compare-and-swap,即比較並替換,也有叫 做compare-and-set的,比較並設定。

非阻塞同步:基於衝突檢測的樂觀併發策略,通俗地說,就是先進行操作,如果沒有其他執行緒爭用共 享資料,那操作就成功了;如果共享資料有爭用,產生了衝突,那就再採取其他的補償措施(最常見 的補償措施就是不斷地重試,直到成功為止),這種樂觀的併發策略的許多實現都不需要把執行緒掛起, 因此這種同步操作稱為非阻塞同步(non-blocking synchronization)。

樂觀鎖與悲觀鎖 理解

當我們要對乙個資料庫中的一條資料進行修改的時候,為了避免同時被其他人修改,最好的辦法就是直接對該資料進行加鎖以防止併發,這種借助資料庫鎖機制在修改資料之前先鎖定,再修改的方式被稱之為悲觀併發控制。悲觀鎖,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度 悲觀...

樂觀鎖和悲觀鎖

1 悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...

樂觀鎖和悲觀鎖

併發衝突 在多使用者的環境下,如果使用者同時修改同乙個文件,就會造成衝突。典型的衝突有兩種 1 丟失更新 乙個使用者的更新記錄覆蓋了另乙個人的更新。如 使用者一 讀 寫 使用者二 讀 寫 那麼使用者一就把使用者二的更新覆蓋了。2 髒讀 乙個使用者更新資料未完成時,另乙個使用者就讀取資訊。使用者一 讀...