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

詳解.NET類庫中的簡易讀寫鎖SmartRWLocker

開發 后端
我們在本文將介紹可復用.NET類庫中的簡易讀寫鎖SmartRWLocker,該類基于ESbasic環境。

本文將詳細介紹可復用.NET類庫中的簡易讀寫鎖SmartRWLocker,該類讀寫鎖的功能較.NET內置的lock關鍵字和ReaderWriterLock類要稍微豐富一些。

1.緣起:

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

lock的使用非常簡潔,而ReaderWriterLock類的使用就要繁瑣很多,比如像這樣:

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

于是,我設計了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()  
  3. {  
  4. using(this.smartRWLocker.Lock(AccessMode.Write))  
  5. {  
  6. // Do Something  
  7. }  

這就非常類似lock的使用方式了。

最后,LastRequireReadTime和LastRequireWriteTime屬性記錄了最后一次獲取讀寫鎖的時間 -- 即從一個側面記錄了我們對目標資源最后一次進行讀寫的時間。

4. 使用時的注意事項

SmartRWLocker簡化了ReaderWriterLock的使用,但是正如有得必有失,它也損失了一些ReaderWriterLock的功能,正如在適用場合中介紹的,使用SmartRWLocker無法設置獲取鎖的超時時間,也無法升級/降級鎖的性質。幸運的是,大多數情況下,我們都用不到這些高級一點的特性,所以,SmartRWLocker還是有它存在的價值的。

如果你的應用需要使用SmartRWLocker不提供的特性,那只有轉向使用ReaderWriterLock本身了。這也未必是個壞主意。

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

5.擴展

原文標題:ESBasic 可復用的.NET類庫(10) -- 簡易的讀寫鎖SmartRWLocker

鏈接:http://www.cnblogs.com/zhuweisky/archive/2009/10/10/1580354.html

【編輯推薦】

  1. .NET Framework詳解之內存機制
  2. .NET內存映射文件原理、創建及進程通訊
  3. .NET內存管理的最佳實踐
  4. .NET 4.0內存映射文件詳解
  5. .NET真的不用管內存嗎?從List﹤T﹥列表聊起

簡易的讀寫鎖SmartRWLocker暫時沒有任何擴展。

責任編輯:彭凡 來源: 博客園
相關推薦

2009-10-21 11:07:32

VB.NET類庫

2023-06-02 08:29:24

https://wwMutex

2010-10-08 18:41:06

VS2010.NET

2009-11-04 14:54:51

.NET類

2009-07-09 17:58:15

MyEclipse配置JDK類庫源代碼

2009-09-02 18:28:55

.NET框架ESBasic

2024-01-29 01:08:01

悲觀鎖遞歸鎖讀寫鎖

2023-03-10 15:45:03

Golang公平鎖

2009-10-20 17:38:54

VB.NET Comp

2009-07-30 13:33:55

ASP.NET中的co

2009-05-21 13:25:50

.NETCountDownLa微軟

2022-07-14 07:01:56

Eureka讀鎖線程

2009-03-09 17:30:42

.NET FramewXMLXmlReader

2010-01-05 16:15:05

.NET Framew

2010-01-08 14:56:18

VB.NET類定義

2024-05-15 09:41:22

樂觀鎖編程

2011-08-18 13:44:42

Oracle悲觀鎖樂觀鎖

2022-03-29 10:52:08

MySQL數據庫

2010-01-05 17:16:28

.NET Framew

2015-11-03 09:24:12

Java讀寫鎖分析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品综合久久久 | 亚洲国产电影 | 成人黄色电影免费 | 久久精品视频免费观看 | 97超碰免费| 搞黄网站在线观看 | 久久久久久高清 | 婷婷综合久久 | 欧美一区在线看 | 青青草原综合久久大伊人精品 | 亚洲一区二区三区高清 | 日韩一级在线 | 国产区在线| 亚洲国产精品99久久久久久久久 | 久久久久99 | 国产片网站 | 欧美一级大片免费看 | 日韩精品在线视频 | 欧美一区二区免费视频 | 日韩久久综合网 | 国产午夜精品一区二区三区嫩草 | 黄色成人国产 | 欧美色视频免费 | 欧美精品日韩 | 污污免费网站 | 一区二区三区四区视频 | 成人在线播放网址 | 欧美日韩精品一区 | 无毛av| 中文字幕视频在线观看 | 久久久久久国产一区二区三区 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 久久精品一区二 | 免费在线观看av片 | 999久久久国产精品 欧美成人h版在线观看 | 国产综合精品一区二区三区 | 三级av网址 | 国产高清精品一区二区三区 | 黄色免费网址大全 | 国产婷婷精品av在线 | 天天天操|