成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入介紹VB.NET類庫 SmartRWLocker技巧

開發 后端
文章主要介紹了VB.NET類庫中的簡易讀寫鎖SmartRWLocker的問題,包括緣起,適用場合,設計思想與實現,使用時的注意事項的介紹。

今天主要給大家來介紹一下關于可復用VB.NET類庫中的簡易讀寫鎖SmartRWLocker的問題和拓展,該類讀寫鎖的功能較.NET內置的lock關鍵字和ReaderWriterLock類要稍微豐富一些,希望對大家有幫助。

1.緣起:

對于需要進行線程同步的地方,我們經常用的就是VB.NET類庫內置的lock關鍵字和ReaderWriterLock類。lock的功能相對簡單,因為它不區分讀寫,也就是說如果都在lock塊中,讀線程都會阻塞另一個讀線程,在很多讀遠遠多于寫的應用中,這會極大地折損性能。所以我們也經常需要使用讀寫分離的鎖ReaderWriterLock,使用它,我們可以明確的指定是要獲取“讀”鎖還是“寫”鎖。而且,當前的“讀”線程是不會阻塞其它的“讀”線程的。lock的使用非常簡潔,而ReaderWriterLock類的使用就要繁瑣很多,比如像這樣:

  1. private ReaderWriterLock readerWriterLock = new ReaderWriterLock();   
  2. public void Test()    
  3. {    
  4. try {  this.readerWriterLock.AcquireWriterLock(-1);  // Do Something   
  5. }   
  6. finally {  this.readerWriterLock.ReleaseWriterLock();  }    
  7. }  

于是,在VB.NET類庫中我設計了ESBasic.Threading.Synchronize.SmartRWLocker來簡化ReaderWriterLock的使用,使得我們可以像使用lock一樣來使用ReaderWriterLock。

2.適用場合:

在大多數使用ReaderWriterLock的地方都可以使用SmartRWLocker來代替,除非你需要使用某些ReaderWriterLock的特殊功能。SmartRWLocker適用于以下場合:
(1)需要使用讀寫分離的鎖。
(2)不需要設置等待鎖的超時時間,也就是無限期地等待鎖。
(3)不需要升級/降級鎖,如將讀鎖升級為寫鎖,或將寫鎖降級為讀鎖。

3.設計思想與實現

SmartRWLocker的類圖如下:

SmartRWLocker的類圖

我們看到SmartRWLocker內部就是借助ReaderWriterLock來實現鎖的控制的。而SmartRWLocker只有一個Lock方法,參數是一個AccessMode枚舉,表示調用者是希望獲取讀鎖還是寫鎖,另外該方法返回一個LockingObject對象。LockingObject的生命周期很有意思,LockingObject對象產生的時候,就是獲取鎖的時刻,其被銷毀的時候(Dispose方法),就是釋放鎖的時刻。所以LockingObject對象的生命周期就是占用鎖的時間段。IDisposable接口與using結合起來使用,會使得語法非常簡單可讀。我們可以這樣來簡潔地使用SmartRWLocker:

  1. private SmartRWLocker smartRWLocker = new SmartRWLocker();  
  2. public void Test2()  {  using(this.smartRWLocker.Lock(AccessMode.Write))  {  // Do Something  }  } 

這就非常類似lock的使用方式了。***,LastRequireReadTime和LastRequireWriteTime屬性記錄了***一次獲取讀寫鎖的時間 -- 即從一個側面記錄了我們對目標資源***一次進行讀寫的時間。

4. 使用時的注意事項

SmartRWLocker簡化了ReaderWriterLock的使用,但是正如有得必有失,它也損失了一些ReaderWriterLock的功能,正如在適用場合中介紹的,使用SmartRWLocker無法設置獲取鎖的超時時間,也無法升級/降級鎖的性質。幸運的是,大多數情況下,我們都用不到這些高級一點的特性,所以,SmartRWLocker還是有它存在的價值的。如果你的應用需要使用SmartRWLocker不提供的特性,那只有轉向使用ReaderWriterLock本身了。這也未必是個壞主意。

使用任何類型的鎖的時候,你都需要注意鎖的“粒度”的問題,即你的鎖要鎖住的范圍有多大。粒度太大,會降低系統的并發;粒度太細,又會使得編程相當繁瑣。所以在設計時需要進行權衡,為你的鎖選擇一個恰當的粒度是非常重要的。

【編輯推薦】

  1. VB.NET復制讀取音頻文件到剪貼板小技巧
  2. 深入概括VB.NET運行環境
  3. 快速使用VB.NET搜索程序實例
  4. WinRar對VB.NET文件壓縮技巧歸納總結
  5. 全面概括VB格式輸出函數Format的使用
責任編輯:田樹 來源: 新客網
相關推薦

2009-10-28 10:15:48

VB.NET框架類庫

2010-01-08 18:31:45

VB.NET歷史菜單

2010-01-07 17:24:12

VB.NET連接數據庫

2010-01-11 16:04:10

VB.NET使用wit

2009-10-28 09:55:29

VB.NET MyCl

2010-01-12 15:21:48

VB.NET權限控制

2009-10-21 10:05:30

VB.NET運行環境

2009-10-29 10:45:01

VB.NET設置控件

2009-10-20 09:39:04

VB.NET Butt

2009-11-10 13:08:13

VB.NET編程技巧

2010-01-18 18:20:49

VB.NET使用API

2009-10-12 15:44:26

VB.NET動態編碼技

2009-10-13 14:50:59

VB.NET Envi

2010-01-12 16:20:44

VB.NET類

2009-10-20 17:38:54

VB.NET Comp

2010-01-15 19:24:42

2009-11-10 10:28:20

VB.NET誕生

2010-01-21 16:45:00

VB.NET繼承規則

2010-01-07 15:25:11

VB.NET數組

2009-10-12 15:02:51

VB.NET動態控件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美综合在线视频 | 欧美激情亚洲天堂 | 日日摸夜夜爽人人添av | 亚洲一区中文字幕在线观看 | 精品一区电影 | 婷婷丁香在线视频 | 玖玖国产 | 一区二区精品视频 | 亚洲日韩第一页 | 在线观看h视频 | 国产欧美在线一区二区 | 视频三区| 国产精品久久久久久久久久久久午夜片 | 精品视频在线免费观看 | 欧美一区二区三区在线观看 | 亚洲精品一区二区三区蜜桃久 | 国产精品一区二区三区久久 | 日本理论片好看理论片 | 久久久蜜桃一区二区人 | 国产精品久久久久久妇女6080 | 久久剧场 | 成人av播放| 很黄很污的网站 | 成年人免费看的视频 | 亚洲精品欧美 | 国产日韩视频 | 亚洲视频国产视频 | 国内精品久久精品 | 国产综合av | h漫在线观看 | 久久久精品视 | 一区二区三区四区不卡视频 | 国产网站在线播放 | 亚洲免费在线观看视频 | 亚洲精品一区二区在线观看 | 色婷婷亚洲一区二区三区 | 五月综合激情网 | 日韩在线视频一区二区三区 | 毛片黄片免费看 | 国产精品视频入口 | 久久草视频 |