天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

.NET中鎖6大處理方法 悲觀樂觀自己掌握

  本文介紹了處理.NET中鎖的6種方法,首先我們討論一下并發性問題,然后討論處理樂觀鎖的3種方法,樂觀鎖不能從根源上解決并發問題,因此后面我們介紹了悲觀鎖,最后介紹隔離級別如何幫助我們實現悲觀鎖,每個隔離級別都列舉了示例進行說明,使得概念更加清晰。

  我們為什么需要鎖?

  在多用戶環境中,在同一時間可能會有多個用戶更新相同的記錄,這就會產生沖突,這個就是著名的并發性問題。

我們為什么需要鎖?

  圖 1 并行性問題漫畫

  如何解決并發性問題?

  借助正確的鎖定策略可以解決并發性問題,資源被鎖定后,其它進程想要訪問它就會被阻止。

  并發會造成什么樣的沖突?

  并發主要會導致四種常見的問題,詳細情況請看下表。

問題簡要描述解釋
臟讀取當一個事務讀取其它完成一半事務的記錄時,就會發生臟讀取
  • 用戶A和用戶B看到的值都是5
  •  用戶B將值修改為2
  •  用戶A看到的值仍然是5,這時就發生了臟讀取
不可重復讀取在每次讀數據時,如果你獲得的值都不一樣,那表明你遇到了不可重復讀取問題
  • 用戶A看到的值是5
  • 用戶B將值改為2
  • 用戶A刷新后看到的值仍然是5,這時就發生了不可重復讀取
虛幻行如果update和delete SQL語句未對數據造成影響,很可能遇到了虛幻行問題
  • 用戶A將所有值從5修改為2
  • 用戶B使用值2插入一個新記錄
  • 用戶A查詢所有值為2的記錄,但卻找不到,這時就發生了虛幻行
更新丟失一個事務的更新覆蓋了其它事務的更新結果,就是所謂的更新丟失
  • 用戶A將所有值從5更新為2
  • 用戶B將所有值從2更新到5
  •  用戶A丟失了他的更新

  如何解決上述沖突?

  答案是使用樂觀鎖或悲觀鎖,下面將進一步進行闡述。

我們為什么需要鎖?

  圖 2 樂觀鎖和悲觀鎖  

  什么是樂觀鎖?

  顧名思義,樂觀鎖假設多個事務相互不會影響對方,換句話說就是,在樂觀鎖模式下,沒有鎖操作會得到執行,事務只是驗證是否有其它事務修改數據,如果有則進行事務回滾,否則就提交。

處理.<a href=/itjie/NETjishu/ target=_blank class=infotextkey>NET</a>中鎖的6種方法

 圖 3 樂觀鎖

  樂觀鎖是如何工作的?

  實現樂觀鎖的方法有多種,但基本原則都一樣,總是少不了下面五個步驟:

  •記錄當前的時間戳

  •開始修改值

  •在更新前,檢查是否有其他人更新了值(通過檢查新舊時間戳實現)

  • 如果不相等就回滾,否則就提交

處理.<a href=/itjie/NETjishu/ target=_blank class=infotextkey>NET</a>中鎖的6種方法

  圖 4 樂觀鎖的工作原理

  實現樂觀鎖的解決方案

  在.NET中,實現樂觀鎖的方法主要有三種:

  •數據集(Dataset):數據集是實現樂觀鎖的默認方法,在更新前它會檢查新舊值。

  • 時間戳數據類型(timestamp):在你的表中創建一個timestamp數據類型,在更新時,檢查舊時間戳是否等于新時間戳。

  •直接檢查新舊值:在更新時檢查舊值和新值是否相等,如果不相等就回滾,否則就提交。

  解決方案1:數據集

  正如前面所說的,數據集是處理樂觀鎖的默認方法,下面是一個簡單的快照,在Adapter的update函數上有一個調試點,當我移除斷點運行update函數時,它拋出如下圖所示的并行異常錯誤。

處理.<a href=/itjie/NETjishu/ target=_blank class=infotextkey>NET</a>中鎖的6種方法

  圖 5 Update函數執行時拋出的異常錯誤

  如果你運行后端分析器,你將會看到更新語句檢查當前值和舊值是否相等: 

exec sp_executesql N'UPDATE [tbl_items] SET [AuthorName] = @p1
 WHERE (([Id] = @p2) AND ((@p3 = 1 AND [ItemName] IS NULL)

OR ([ItemName] = @p4)) AND ((@p5 = 1 AND [Type] IS NULL)
OR ([Type]
= @p6)) AND ((@p7 = 1 AND [AuthorName] IS NULL)
OR ([AuthorName]
= @p8)) AND ((@p9 = 1 AND [Vendor] IS NULL)
OR ([Vendor]
= @p10)))',N'@p1 nvarchar(11),@p2 int,@p3
int,@p4 nvarchar(4),@p5 int,@p6 int,@p7
int
,@p8 nvarchar(18),@p9 int,@p10 nvarchar(2)',
@p1=N
'this is new',@p2=2,@p3=0,@p4=N'1001',@p5=0,@p6=3,@p7=0,
@p8=N
'This is Old
Author
',@p9=0,@p10=N'kk'

NET技術.NET中鎖6大處理方法 悲觀樂觀自己掌握,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲欧美成人综合 | 亚洲激情一区 | 鲁大师影院在线视频在线观看 | 久久这里有精品 | 亚洲福利天堂网福利在线观看 | 伦理电影2499伦理片 | 亚洲午夜精品一区二区公牛电影院 | 小莹的性荡生活40章 | 97色伦在色在线播放 | 亚洲AV中文字幕无码久久 | 草莓视频在线观看免费观看高清 | 蜜芽资源高清在线观看 | 秋霞成人午夜鲁丝一区二区三区 | 久久xxxx | 老熟女重囗味GRANNYBBW | 精品久久香蕉国产线看观看麻豆 | 欧美性情一线免费http | 91传媒蜜桃香蕉在线观看 | 亚洲成人99 | 中国字字幕在线播放2019 | 《乳色吐息》无删减版在线观看 | 午夜人妻理论片天堂影院 | 国产精品午夜福利在线观看 | 日本孕妇大胆孕交 | 旧里番6080在线观看 | 一级am片欧美| 出租屋交换人妻 全文 | 亚洲欧美成人无码久久久 | 亚洲 欧美 国产 伦 综合 | 亚洲大片在线观看 | 3D内射动漫同人资源在线观看 | 帝王被大臣们调教高肉 | 欧美日韩中文在线字幕视频 | 墨西哥美女主播 | 夜夜骑夜夜欢 | 青青伊人影院 | 中文在线观看 | 人妻美妇疯狂迎合 | 新影音先锋男人色资源网 | 色丁香婷婷综合缴情综 | 99欧美精品 |