国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 02:31:20
字體:
來源:轉載
供稿:網友

基礎才是重中之重~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塊的代碼漂亮了許多吧!

回到目錄


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卓资县| 平舆县| 张家港市| 南安市| 墨玉县| 昭苏县| 乐昌市| 芒康县| 疏勒县| 衡东县| 出国| 兴国县| 马山县| 潍坊市| 鞍山市| 黄骅市| 和政县| 平度市| 壶关县| 石屏县| 建德市| 兴山县| 攀枝花市| 德州市| 西吉县| 鄂尔多斯市| 莎车县| 静海县| 清水河县| 岳阳市| 思南县| 奉节县| 新平| 宝坻区| 凤翔县| 蒙阴县| 内黄县| 清新县| 上林县| 衡山县| 永兴县|