好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > .NET中 關于臟讀 不可重復讀與幻讀的代碼示例

.NET中 關于臟讀 不可重復讀與幻讀的代碼示例

熱門標簽:地圖標注位置多的錢 廈門四川外呼系統 內蒙古智能電銷機器人哪家強 山東防封電銷卡辦理套餐 怎樣在地圖標注消火栓圖形 杭州智能電話機器人 濟源人工智能電話機器人價格 百度地圖標注點擊事件 泰州手機外呼系統軟件

并發可能產生的三種問題

臟讀

定義:A事務執行過程中B事務讀取了A事務的修改,但是A事務并沒有結束(提交),A事務后來可能成功也可能失敗。

比喻:A修改了源代碼并且并沒有提交到源代碼系統,A直接通過QQ將代碼發給了B,A后來取消了修改。

代碼示例

復制代碼 代碼如下:

[TestMethod]
         public void 臟讀_測試()
         {
             //前置條件
             using (var context = new TestEntities())
             {
                 Assert.AreEqual(1, context.Tables.Count());
             }

             var autoResetEvent = new AutoResetEvent(false);

             var transactionOptions1 = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };
             var transactionOptions2 = new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted };

             using (var ts1 = new TransactionScope(TransactionScopeOption.Required, transactionOptions1))
             {
                 //添加數據
                 using (var context = new TestEntities())
                 {
                     context.Tables.Add(new Table() { Id = Guid.NewGuid(), Name = "段光偉" });
                     context.SaveChanges();
                 }

                 ThreadPool.QueueUserWorkItem(data =>
                 {
                     using (var ts2 = new TransactionScope(TransactionScopeOption.Required, transactionOptions2))
                     {
                         //臟讀測試
                         using (var context = new TestEntities())
                         {
                             Assert.AreEqual(2, context.Tables.Count());
                         }
                     }

                     autoResetEvent.Set();
                 });

                 autoResetEvent.WaitOne();
             }

             //前置條件
             using (var context = new TestEntities())
             {
                 Assert.AreEqual(1, context.Tables.Count());
             }
         }

不可重復讀

定義:A事務讀取了兩次數據,在這兩次的讀取過程中B事務修改了數據,A事務的這兩次讀取出來的數據不一樣了(不可重復讀)。

比喻:A在做源代碼審查,在審查的過程中獲取了兩次源代碼,在這兩次獲取期間B修改了源代碼,B修改的很可能是A審查過的代碼,而這部分代碼可能不符合規范了。

代碼示例

復制代碼 代碼如下:

[TestMethod]
         public void 不可重復讀_測試()
         {
             var autoResetEvent = new AutoResetEvent(false);

             var transactionOptions1 = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };
             var transactionOptions2 = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };

             using (var ts1 = new TransactionScope(TransactionScopeOption.Required, transactionOptions1))
             {
                 //前置條件
                 using (var context = new TestEntities())
                 {
                     Assert.AreEqual("李妞妞", context.Tables.First().Name);
                 }

                 ThreadPool.QueueUserWorkItem(data =>
                 {
                     using (var ts2 = new TransactionScope(TransactionScopeOption.Required, transactionOptions2))
                     {
                         //修改數據
                         using (var context = new TestEntities())
                         {
                             context.Tables.First().Name = "段光偉";
                             context.SaveChanges();
                         }

                         ts2.Complete();   
                     }

                     autoResetEvent.Set();
                 });

                 autoResetEvent.WaitOne();

                 //不可重復讀測試
                 using (var context = new TestEntities())
                 {
                     Assert.AreEqual("段光偉", context.Tables.First().Name);
                 }
             }
         }

幻讀

定義:A事務讀取了兩次數據,在這兩次的讀取過程中B事務添加了數據,A事務的這兩次讀取出來的集合不一樣了(幻讀)。

比喻:A在統計文件數據,為了統計精確A統計了兩次,在這兩次的統計過程中B添加了一個文件,A發現這兩次統計的數量不一樣(幻讀),A會感覺自己的腦袋有點頭疼。

代碼示例

復制代碼 代碼如下:

[TestMethod]
         public void 幻讀_測試()
         {
             var autoResetEvent = new AutoResetEvent(false);

             var transactionOptions1 = new TransactionOptions { IsolationLevel = IsolationLevel.RepeatableRead };
             var transactionOptions2 = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };

             using (var ts1 = new TransactionScope(TransactionScopeOption.Required, transactionOptions1))
             {
                 //前置條件
                 using (var context = new TestEntities())
                 {
                     Assert.AreEqual(1, context.Tables.Count());
                 }

                 ThreadPool.QueueUserWorkItem(data =>
                 {
                     using (var ts2 = new TransactionScope(TransactionScopeOption.Required, transactionOptions2))
                     {
                         //添加數據
                         using (var context = new TestEntities())
                         {
                             context.Tables.Add(new Table() { Id = Guid.NewGuid(), Name = "段光偉" });
                             context.SaveChanges();
                         }

                         ts2.Complete();
                     }

                     autoResetEvent.Set();
                 });

                 autoResetEvent.WaitOne();

                 //幻讀測試
                 using (var context = new TestEntities())
                 {
                     Assert.AreEqual(2, context.Tables.Count());
                 }
             }
         }

四種隔離級別如何處理并發問題
  臟讀 不可重復讀 幻讀
讀未提交 允許 允許 允許
讀已提交 不允許 允許 允許
可重復讀 不允許 不允許 允許
串行化 不允許 不允許 不允許

標簽:周口 新鄉 洛陽 百色 臺州 朝陽 喀什 朔州

巨人網絡通訊聲明:本文標題《.NET中 關于臟讀 不可重復讀與幻讀的代碼示例》,本文關鍵詞  .NET,中,關于,臟讀,不可,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《.NET中 關于臟讀 不可重復讀與幻讀的代碼示例》相關的同類信息!
  • 本頁收集關于.NET中 關于臟讀 不可重復讀與幻讀的代碼示例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: yy6080新视觉伦理| 我和留守村妇那些事| 中文幕无线码一二三四区| 坐在腰腹上晃h| 一本久久久久精品国产综合| 一级黄色特级片| 天堂色在线| 久久精品无码一区二区日韩Av| 无遮挡黄动漫在线观看播放| 亚洲韩国乱理片大全| 亚洲AV秘?无码一区三区| 黑人gay巨大雕tube口黑| 粉嫩小缝太窄了进不去| 王曼丽的足奴训练1| 亚洲中文字幕无码一区二区三区成人久久片 | 精品少妇人妻一区二区大牛影视| 一受n攻高h全肉np男男| 日本熟妇av六十路久久久久久| 午夜成人理论片A片葵司| a级片观看| 亚洲 国产 另类 无码 日韩| 97久久人人| 秘书婬荡呻吟揉捏丰满奶头电影 | 罗志祥5G天天奭免费高清电视剧| 天天干天天射综合网| 学生女去按摩店三级| 日本人妻无码电车痴汉| ?国产免费嫩草影院?| 久久大香伊焦在人线免费| 男人亲胸吃奶摸下面视频| jZZJIZZ成熟丰满韩国女人| 欧美熟妇hairy高潮HD| chinese男性吹潮视频| 韩国三级ok天堂影院李采潭 | 硕大蘑菇头顶开粉嫩的小缝 | 国产性猛交?XX?乱视频| 国产精品另类熟女吞精| 男女活塞运动| 二次元被到爽羞羞动漫| 动漫美女被吸乳视频| 国产东北妇女野战视频|