欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

ESBasic 可復用的.NET類庫(10) -- 簡易的讀

系統 1698 0

1. 緣起:

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

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> private ReaderWriterLock readerWriterLock = new ReaderWriterLock ();
public void Test()
{
try
{
this .readerWriterLock.AcquireWriterLock( - 1 );
// DoSomething
}
finally
{
this .readerWriterLock.ReleaseWriterLock();
}
}


于是,我設計了 ESBasic.Threading.Synchronize.SmartRWLocker 來簡化 ReaderWriterLock 的使用,使得我們可以像使用 lock 一樣來使用 ReaderWriterLock

2. 適用場合:

在大多數使用 ReaderWriterLock 的地方都可以使用 SmartRWLocker 來代替,除非你需要使用某些 ReaderWriterLock 的特殊功能。 SmartRWLocker 適用于以下場合:

(1) 需要使用讀寫分離的鎖。

(2) 不需要設置等待鎖的超時時間,也就是無限期地等待鎖。

(3) 不需要升級 / 降級鎖,如將讀鎖升級為寫鎖,或將寫鎖降級為讀鎖。

3 .設計思想與實現

SmartRWLocker 的類圖如下:

ESBasic 可復用的.NET類庫(10) -- 簡易的讀寫鎖 SmartRWLocker

我們看到 SmartRWLocker 內部就是借助 ReaderWriterLock 來實現鎖的控制的。而 SmartRWLocker 只有一個 Lock 方法,參數是一個 AccessMode 枚舉,表示調用者是希望獲取讀鎖還是寫鎖,另外該方法返回一個 LockingObject 對象。 LockingObject 的生命周期很有意思, LockingObject 對象產生的時候,就是獲取鎖的時刻,其被銷毀的時候( Dispose 方法),就是釋放鎖的時刻。所以 LockingObject 對象的生命周期就是占用鎖的時間段。

IDisposable 接口與 using 結合起來使用,會使得語法非常簡單可讀。我們可以這樣來簡潔地使用 SmartRWLocker

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> private SmartRWLocker smartRWLocker = new SmartRWLocker ();
public void Test2()
{
using ( this .smartRWLocker.Lock( AccessMode .Write))
{
// DoSomething
}
}

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

4. 使用時的注意事項

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

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

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

5. 擴展

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

注:ESBasic源碼可到 http://esbasic.codeplex.com/ 下載。
ESBasic討論:37677395
ESBasic開源前言

ESBasic 可復用的.NET類庫(10) -- 簡易的讀寫鎖 SmartRWLocker


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本黄色小视频 | 最近免费日本视频在线 | 天天爽天天操 | 99久久99久久精品免费看蜜桃 | 成人午夜性视频欧美成人 | 欧美成人一级 | 狠狠躁夜夜躁人人爽天天miya | 久久99精品久久久久久秒播 | a国产精品| 成人免费在线视频网站 | 亚洲国产一区二区三区四区色欲 | 亚洲精品久久国产高清 | 青娱乐免费视频在线观看 | 成人免费网站在线观看 | 中国一级大黄大黄大色毛片 | 香蕉久久夜色精品国产小优 | 日韩亚洲视频 | 国产精品久久久久久亚洲调教 | 亚洲视频在线观看 | 久久久国产视频 | 精一区二区| 亚洲欧美精品 | 国产1区2区 | 日韩视频在线一区二区 | 国产精品27页 | 毛片免费观看视频 | 九九这里只有精品视频 | 一级做a爰片久久毛片人呢 达达兔午夜起神影院在线观看麻烦 | 波多野结衣在线网站 | 丁香九月婷婷 | 日本一本久道 | 国产欧美久久一区二区三区 | 日韩精品免费视频 | 亚洲 中文 欧美 日韩 在线观看 | 我把寡妇日出水好爽视频 | 亚洲精品乱码久久久久久按摩观 | av网站免费观看 | 国产精品久久自在自2021 | 在线成人免费视频 | 午夜色a大片在线观看免费 龙珠z在线观看 | 97精品国产高清久久久久蜜芽 |