自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入介紹VB.NET類庫(kù) SmartRWLocker技巧

開(kāi)發(fā) 后端
文章主要介紹了VB.NET類庫(kù)中的簡(jiǎn)易讀寫(xiě)鎖SmartRWLocker的問(wèn)題,包括緣起,適用場(chǎng)合,設(shè)計(jì)思想與實(shí)現(xiàn),使用時(shí)的注意事項(xiàng)的介紹。

今天主要給大家來(lái)介紹一下關(guān)于可復(fù)用VB.NET類庫(kù)中的簡(jiǎn)易讀寫(xiě)鎖SmartRWLocker的問(wèn)題和拓展,該類讀寫(xiě)鎖的功能較.NET內(nèi)置的lock關(guān)鍵字和ReaderWriterLock類要稍微豐富一些,希望對(duì)大家有幫助。

1.緣起:

對(duì)于需要進(jìn)行線程同步的地方,我們經(jīng)常用的就是VB.NET類庫(kù)內(nèi)置的lock關(guān)鍵字和ReaderWriterLock類。lock的功能相對(duì)簡(jiǎn)單,因?yàn)樗粎^(qū)分讀寫(xiě),也就是說(shuō)如果都在lock塊中,讀線程都會(huì)阻塞另一個(gè)讀線程,在很多讀遠(yuǎn)遠(yuǎn)多于寫(xiě)的應(yīng)用中,這會(huì)極大地折損性能。所以我們也經(jīng)常需要使用讀寫(xiě)分離的鎖ReaderWriterLock,使用它,我們可以明確的指定是要獲取“讀”鎖還是“寫(xiě)”鎖。而且,當(dāng)前的“讀”線程是不會(huì)阻塞其它的“讀”線程的。lock的使用非常簡(jiǎn)潔,而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類庫(kù)中我設(shè)計(jì)了ESBasic.Threading.Synchronize.SmartRWLocker來(lái)簡(jiǎn)化ReaderWriterLock的使用,使得我們可以像使用lock一樣來(lái)使用ReaderWriterLock。

2.適用場(chǎng)合:

在大多數(shù)使用ReaderWriterLock的地方都可以使用SmartRWLocker來(lái)代替,除非你需要使用某些ReaderWriterLock的特殊功能。SmartRWLocker適用于以下場(chǎng)合:
(1)需要使用讀寫(xiě)分離的鎖。
(2)不需要設(shè)置等待鎖的超時(shí)時(shí)間,也就是無(wú)限期地等待鎖。
(3)不需要升級(jí)/降級(jí)鎖,如將讀鎖升級(jí)為寫(xiě)鎖,或?qū)?xiě)鎖降級(jí)為讀鎖。

3.設(shè)計(jì)思想與實(shí)現(xiàn)

SmartRWLocker的類圖如下:

SmartRWLocker的類圖

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

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

這就非常類似lock的使用方式了。***,LastRequireReadTime和LastRequireWriteTime屬性記錄了***一次獲取讀寫(xiě)鎖的時(shí)間 -- 即從一個(gè)側(cè)面記錄了我們對(duì)目標(biāo)資源***一次進(jìn)行讀寫(xiě)的時(shí)間。

4. 使用時(shí)的注意事項(xiàng)

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

使用任何類型的鎖的時(shí)候,你都需要注意鎖的“粒度”的問(wèn)題,即你的鎖要鎖住的范圍有多大。粒度太大,會(huì)降低系統(tǒng)的并發(fā);粒度太細(xì),又會(huì)使得編程相當(dāng)繁瑣。所以在設(shè)計(jì)時(shí)需要進(jìn)行權(quán)衡,為你的鎖選擇一個(gè)恰當(dāng)?shù)牧6仁欠浅V匾摹?/P>

【編輯推薦】

  1. VB.NET復(fù)制讀取音頻文件到剪貼板小技巧
  2. 深入概括VB.NET運(yùn)行環(huán)境
  3. 快速使用VB.NET搜索程序?qū)嵗?/FONT>
  4. WinRar對(duì)VB.NET文件壓縮技巧歸納總結(jié)
  5. 全面概括VB格式輸出函數(shù)Format的使用
責(zé)任編輯:田樹(shù) 來(lái)源: 新客網(wǎng)
相關(guān)推薦

2009-10-28 10:15:48

VB.NET框架類庫(kù)

2010-01-08 18:31:45

VB.NET歷史菜單

2010-01-07 17:24:12

VB.NET連接數(shù)據(jù)庫(kù)

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權(quán)限控制

2009-10-21 10:05:30

VB.NET運(yùn)行環(huán)境

2009-10-20 09:39:04

VB.NET Butt

2010-01-15 19:24:42

2009-11-10 10:28:20

VB.NET誕生

2010-01-07 15:25:11

VB.NET數(shù)組

2009-10-12 15:02:51

VB.NET動(dòng)態(tài)控件

2010-01-21 16:45:00

VB.NET繼承規(guī)則

2010-01-12 10:40:58

VB.NET數(shù)據(jù)庫(kù)壓縮

2009-10-29 10:45:01

VB.NET設(shè)置控件

2010-01-12 16:20:44

VB.NET類

2009-10-13 14:50:59

VB.NET Envi

2009-10-20 17:38:54

VB.NET Comp

2009-11-03 13:33:39

VB.NET對(duì)象列表

2009-10-14 14:19:00

VB.NET創(chuàng)建表示層
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)