應用
實現方式
一般是在資料表中加上乙個資料版本號version欄位,記錄資料被修改的次數,當資料被修改時,version加1。
執行緒a要更新資料值的時候,讀取資料的同時也會讀取version的值,在提交更新時,若讀取到version的值與第一次讀取的值相等,才會進行更新操作。若不等會重新操作,直到更新成功。
銀行櫃員需要進行存款操作
a櫃員對z賬戶進行存款操作
讀取資料 餘額為:500 version=1
同時b櫃員對z賬戶進行操作 扣款操作
讀取資料 餘額為:500 version=1
b櫃員操作完
資料 餘額為:400 version=2
b櫃員先操作完成
a櫃員提交資料,發現version=2,提交失敗重新操作
即compare and swap(比較與交換),是一種有名的無鎖演算法。無鎖程式設計,也就是不使用鎖的情況下實現多執行緒之間的變數同步,也就是在沒有執行緒被阻塞的情況下實現變數同步,所以也叫非阻塞同步。
理論:涉及到三個運算元
1.需要讀寫的記憶體值 v
2.進行比較的值 a
3.模擬寫入的新值 b
if v==a 時進行更新操作
if v!=a 重新操作
應用場景
銀行
櫃員a 進行存款操作
拿到資料 上鎖 操作完成 釋放鎖 過程中 其他櫃員想進行操作得等待a櫃員操作完成,才可以拿到資料
悲觀鎖與樂觀鎖
悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...
樂觀鎖與悲觀鎖
悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...
樂觀鎖與悲觀鎖
鎖 locking 這個概念在我們學習多執行緒的時候曾經接觸過,其實這裡的鎖和多執行緒裡面處理併發的鎖是乙個道理,都是暴力的把資源歸為自己所有。這裡我們用到鎖的目的就是通過一些機制來保證一些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 鎖 即給我們選定的目標資料上鎖,使其無法...