基礎才是重中之重~ConcurrentDictionary讓你的多執行緒程式碼更優美
ConcurrentDictionary是.net4.0推出的一套執行緒安全集合裡的其中一個,和它一起被髮行的還有ConcurrentStack,ConcurrentQueue等型別,它們的單執行緒版本(執行緒不安全的,Queue,Stack,Dictionary)我們一定不會陌生,可以說是經常用到,一個類的例項裡,有個屬性是個字典,我們不加考慮的會用Dictionary,而當這個屬性被提升為static靜態的(類級別的)時候,我們就要考慮它的執行緒安全性了,因為它有可能被多個執行緒同時訪問,當然,如果這個物件是只讀的,也無所謂執行緒安全,但如果這個屬性是可以被寫的,那就需要把它加鎖了,這程式碼我們經常看到:
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塊的程式碼漂亮了許多吧!
本文轉自部落格園張佔嶺(倉儲大叔)的部落格,原文連結:基礎才是重中之重~ConcurrentDictionary讓你的多執行緒程式碼更優美,如需轉載請自行聯絡原博主。
相關文章
- Java 多執行緒基礎(八)執行緒讓步Java執行緒
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- 多執行緒系列(1),多執行緒基礎執行緒
- 多執行緒系列(二):多執行緒基礎執行緒
- 多執行緒基礎執行緒
- 多執行緒程式設計基礎(二)-- 執行緒池的使用執行緒程式設計
- 執行緒和程式基礎以及多執行緒的基本使用(iOS)執行緒iOS
- 多執行緒學習一(多執行緒基礎)執行緒
- Java 多執行緒基礎(十一)執行緒優先順序和守護執行緒Java執行緒
- 程式執行緒篇——程式執行緒基礎執行緒
- 什麼程式碼才是執行緒安全的執行緒
- 基礎才是重中之重~delegate裡的Invoke和BeginInvoke
- 基礎才是重中之重~lock和monitor的區別
- Java多執行緒程式設計基礎Java執行緒程式設計
- java - 多執行緒基礎Java執行緒
- Java—多執行緒基礎Java執行緒
- 基礎才是重中之重~再說面向介面的程式設計程式設計
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- 多執行緒系列(三):執行緒池基礎執行緒
- 基礎才是重中之重~延遲初始化
- 基礎才是重中之重~方法override詳解IDE
- 多執行緒基礎-基礎實現執行緒
- 多執行緒基礎(十九):Semaphore原始碼分析執行緒原始碼
- Java-基礎程式設計-多執行緒Java程式設計執行緒
- 多執行緒程式設計基礎知識執行緒程式設計
- java多執行緒程式設計--基礎篇Java執行緒程式設計
- 多執行緒基礎入門執行緒
- Java 多執行緒基礎 - CyclicBarrierJava執行緒
- Java多執行緒-基礎篇Java執行緒
- pthread 多執行緒基礎thread執行緒
- 基礎鞏固 --多執行緒執行緒
- 多執行緒基礎知識執行緒
- python多執行緒基礎Python執行緒
- 面試官:這就是你理解的Java多執行緒基礎?面試Java執行緒
- 經驗總結 | 重構讓你的程式碼更優美和簡潔
- 多執行緒程式設計的基礎知識點執行緒程式設計
- C#多執行緒開發-執行緒基礎 01C#執行緒
- 基礎才是重中之重~大叔所理解的資料型別資料型別