中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

基礎才是重(zhong)中之重(zhong)~ConcurrentDictionary讓你(ni)的多線程代碼更優美

回到目錄

ConcurrentDictionary是.net4.0推出的一套線程安全集合里的其中一個,和它一起被發行的還有ConcurrentStack,ConcurrentQueue等類型,它們的單線程版本(線程不安全的,Queue,Stack,Dictionary)我們一定不會陌生,可以說是經常用到,一個類的實例里,有個屬性是個字典,我們不加考慮的會用Dictionary,而當這個屬性被提升為static靜態的(類級別的)時候,我們就要考慮它的線程安全性了,因為它有可能被多個線程同時訪問,當然,如果這個對象是只讀的,也無所謂線程安全,但如果這個屬性是可以被寫的(de),那就需要把它加鎖了,這(zhe)代碼(ma)我們經常看(kan)到:

lock(obj){
_dic[key]=value;
}

看吧,你的代碼會有很我的lock塊,不說它是否漂亮,但從性能上看,就不能被接收,我們知道,lock會把其它線程鎖在外面,無論是讀還是寫,都會被鎖,性能非常并,微軟自己也看到了它的不足,所以才推出了System.Collections.Concurrent集合,在這個命名空間里,開發了一批線程安全的對象,當然內核也類似于lock機制,但小微自己一定是做了不少優化的,這是我們能肯定的,呵呵.

如果你之前的方法用的都是Dicationary的,那修改也方便,只要利用適配器模式,把它加工一下即可

       private readonly static ConcurrentDictionary<string, T> _dic;
#region
IDictionary<string,ResultType> 成員 public void Add(string key, T value) { _dic.TryAdd(key, value); } public bool ContainsKey(string key) { return _dic.ContainsKey(key); } public ICollection<string> Keys { get { return _dic.Keys; } } public bool Remove(string key) { T val; return _dic.TryRemove(key, out val); } public bool TryGetValue(string key, out T value) { return _dic.TryGetValue(key, out value); } public ICollection<T> Values { get { return _dic.Values; } } public T this[string key] { get { return _dic[key]; } set { _dic[key] = value; } } #endregion

怎么樣,沒有lock塊的代碼漂亮(liang)了許多吧!

回到目錄

posted @ 2015-03-17 11:53  張占嶺  閱讀(28632)  評論(10)    收藏  舉報