真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#中ReaderWriterLock的作用是什么

這篇文章將為大家詳細講解有關(guān)C#中 ReaderWriterLock的作用是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

成都創(chuàng)新互聯(lián)公司-成都網(wǎng)站建設(shè)公司,專注成都做網(wǎng)站、成都網(wǎng)站設(shè)計、網(wǎng)站營銷推廣,申請域名,網(wǎng)站空間,網(wǎng)站托管、服務(wù)器租用有關(guān)企業(yè)網(wǎng)站制作方案、改版、費用等問題,請聯(lián)系成都創(chuàng)新互聯(lián)公司。

Performance非常差

UpgradeToWriterLock并不是atomic的從ReaderLock轉(zhuǎn)換到WriterLock,而是等同于"lock.ReleaseReaderLock(); lock.AcquireWriterLock();".這樣的semantics有一定的迷惑性,我開始的時候也認為這個operation是 atomic的,等出現(xiàn)bug并debug了很久才發(fā)現(xiàn)原來如此。不過經(jīng)過認真的思考,發(fā)現(xiàn)這其實不是。NET designer的錯,根本沒辦法把這個operation設(shè)計成atomic的。原因如下:

很多個thread同時acquire到了ReaderLock,

他們都call UpgradeToWriterLock,如果這個operation是atomic的,那么沒有哪個thread能upgrade成功。

后來我干脆不用C# ReaderWriterLock了,直接換成了LockFree的方法。在C#中實現(xiàn)LockFree其實是很簡單的,因為有了Garbage Collection,

code:

  1. class LockFreeDictionary, Value>{  

  2. private Dictionary, Value> m_dict = new Dictionary, Value>();  

  3.  

  4. public Value Lookup(Key key){  

  5. return m_dict[key];  

  6. }  

  7.  

  8. public void Update(Key key, Value value){  

  9. Dictionary, Value> newDict = null;  

  10. Dictionary, Value> oldDict = null;  

  11. do{  

  12. oldDict = m_dict;  

  13. newnewDict = new Dictionary, Value>(oldDict);  

  14. newDict[key] = value;  

  15. }  

  16. while (Interlocked.CompareExchange, Value>>
    (ref m_dict, newDict, oldDict) != oldDict);  

  17. }  

  18. }  

第16行 ,保持參照原有Dictionary物件,

第17行,建造一個新的字典對象的基礎(chǔ)上原有的物件。為oldDict ,這一步是只讀的,而且不需要鎖,

第18行,執(zhí)行更新操作后,新建造的對象,

第19行,請嘗試更換新的對象到原來的1 。如果返回值Interlocked.CompareExchange操作不等于oldDict ,這意味著在此做,而塊executation ,有另一個線程改變m_dict 。在這種情況下,我們需要做更新一次。

換出的對象( oldDict )可以收集到的垃圾收集。

如果我們想用LockFree數(shù)據(jù)結(jié)構(gòu)C++中,還有另一種技術(shù)稱為危害指針。這是在IBM的研究論文。

不過不是什么情況都可以使用這種LockFreeDictionary的,,不然你會得到相反的效果(performance很差),這里的scenario是read非常多,write非常少。 不過這種情況也挺常見的。

關(guān)于C#中 ReaderWriterLock的作用是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


本文名稱:C#中ReaderWriterLock的作用是什么
文章出自:http://weahome.cn/article/gjcpph.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部