《你不常用的c#之九》:双城记(Lock-Free Dictionary Read/Write)

 

此篇写于2009年11月 22日,一直处草稿状态,本想写的更深入些,就这样吧。

 

 

1),多线程下如何安全的遍历一个Dictionary?

 lock (_syncRoot)
         {
            
foreach (string s in Dictionary.Values)
            {
               
//todo耗时操作
            }
         }


2),多线程下如何安全遍历一个非常大的Dictionary

如果采用1)中的代码,效率是非常低的!ReaderWriterLockSlim?也不用。

国民党人总结《论持久战》:以空间换时间,积小胜为大胜。

其实在算法上讲,最后一句应该是分治。而前一句“空间换时间”在某些情况下也堪称救世良药。

那我们就来个镜像(称为:clone),对镜像的一切操作均不影响主(main)的任何运行时结构。

         Dictionary<intstring> clone = new Dictionary<intstring>(main);
       然后遍历clone就可以了: 
foreach (string s in clone.Values)
         { 
            
//todo
         }

 

 


 

posted @ 2011-03-19 11:12 overred 阅读(418) 评论(2) 编辑 收藏

 回复 引用 查看   
#1楼 2011-09-20 10:14 小说王子      
哥哥很强大,学习了,支持~~~~~~
 回复 引用 查看   
#2楼 2012-02-21 11:36 hahazhu      
很不错
这个解决方案 的应用场景 是读取

如果 还有修改什么滴 还是需要锁滴