天天看點

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

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

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

怎麼樣,沒有lock塊的代碼漂亮了許多吧!

繼續閱讀