樂觀鎖一般有2種實現方式:
a.在資料表中增加乙個版本號字段。
當表中資料有更新時,版本號隨之遞增+1,有執行緒需要更新資料時,在讀所需資料的同時也會讀取到資料的版本號,更新資料操作時,會判斷讀到的版本號與資料表中的版本號是否一致,一致才會更新,否則會重新嘗試更新操作,直到成功。
b.cas(compare and swap 比較並交換)
cas是項樂觀鎖技術,當多個執行緒嘗試使用cas同時更新同乙個變數時,只有其中乙個執行緒能更新變數的值,而其它執行緒都失敗,失敗的執行緒並不會被掛起,而是被告知這次競爭中失敗,並可以再次嘗試。cas是一種非阻塞式的同步方式。
cas 操作包含三個運算元 —— 記憶體位置(v)、預期原值(a)和新值(b)。如果記憶體位置的值與預期原值相匹配,那麼處理器會自動將該位置值更新為新值。否則,處理器不做任何操作。無論哪種情況,它都會在 cas 指令之前返回該位置的值。(在 cas 的一些特殊情況下將僅返回 cas 是否成功,而不提取當前值。)cas 有效地說明了「我認為位置 v 應該包含值 a;如果包含該值,則將 b 放到這個位置;否則,不要更改該位置,只告訴我這個位置現在的值即可。」這其實和樂觀鎖的衝突檢查+資料更新的原理是一樣的。
悲觀鎖與樂觀鎖
悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...
樂觀鎖與悲觀鎖
悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...
樂觀鎖與悲觀鎖
鎖 locking 這個概念在我們學習多執行緒的時候曾經接觸過,其實這裡的鎖和多執行緒裡面處理併發的鎖是乙個道理,都是暴力的把資源歸為自己所有。這裡我們用到鎖的目的就是通過一些機制來保證一些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 鎖 即給我們選定的目標資料上鎖,使其無法...