首頁  >  文章  >  資料庫  >  常見的樂觀鎖實作方式有幾種

常見的樂觀鎖實作方式有幾種

王林
王林原創
2020-07-03 11:49:447888瀏覽

常見的樂觀鎖定實作方式有兩種,分別是:1、版本號機制;2、CAS演算法。其中,透過版本號機制實現樂觀鎖是最經典的方法。版本號機制一般是在資料表中加上一個資料庫版本號version欄位。

常見的樂觀鎖實作方式有幾種

實作方式:

(推薦學習:mysql教學

1 、版本號機制

一般是說在資料表中加上一個資料庫版本號version字段,在表述資料被修改的次數當資料被修改時,它的version 值會加1。

如:

當然執行緒A需要更新資料值時,在讀取資料的同時也會讀取version 值,在提交更新時,若剛才讀取到的version 值為目前資料庫中的version 值相等時才更新,否則重試更新操作,直到更新成功。

2、CAS 演算法

CAS(compare and swap) 比較並交換,有三個運算元,記憶體位址V ,預期值B,要替換得到的目標子A。

CAS指令執行時,比較記憶體位址V與預期值B是否相等,若相等則將A賦給B,(不相等則會循環比較直到相等)整個比較賦值運算是一個原子運算。

CAS缺點:

(1)循環時間開銷大:當記憶體位址V與預期值B不相等時會一直循環比較直到相等;

(2)只能保證一個共享變數的原子操作;

(3)如果一個變數V初次讀取的時候是A值,並且在準備賦值的時候檢查到它仍然是A值,那麼我們就能說明它的值沒有被其他線程修改過嗎?很明顯不是,因為在這段時間內它的值可能被改為其他值,然後又被改回A,那CAS操作就會認為它從來沒被改過,這個問題就被稱為CAS 操作的“ABA 」 問題;

以上是常見的樂觀鎖實作方式有幾種的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn