為什么使用并發(fā)集合?

原因主要有以下幾點(diǎn):

  • System.Collections和System.Collections.Generic名稱空間中所提供的經(jīng)典列表、集合和數(shù)組都不是線程安全的,若無同步機(jī)制,他們不適合于接受并發(fā)的指令來添加和刪除元素。

  • 在并發(fā)代碼中使用上述經(jīng)典集合需要復(fù)雜的同步管理,使用起來很不方便。

  • 使用復(fù)雜的同步機(jī)制會大大降低性能。

  • NET Framework 4所提供的新的集合盡可能地減少需要使用鎖的次數(shù)。這些新的集合通過使用比較并交換(compare-and-swap,CAS)指令和內(nèi)存屏障,避免使用互斥的重量級鎖。這對性能有保障。

注意:

與經(jīng)典集合相比,并發(fā)集合會有更大的開銷,因此在串行代碼中使用并發(fā)集合無意義,只會增加額外的開銷且運(yùn)行速度比訪問經(jīng)典集合慢。

 

2 并發(fā)集合

1)ConcurrentQueue:線程安全的先進(jìn)先出 (FIFO) 集合

主要方法:

  • Enqueue(T item);將對象添加到集合結(jié)尾。

  • TryDequeue(out T result); 嘗試移除并返回位于集合開始處的對象,返回值表示操作是否成功。

  • TryPeek(out T result);嘗試返回集合開始處的對象,但不將其移除,返回值表示操作是否成功。

說明:

  • ConcurrentQueue是完全無鎖的,但當(dāng)CAS操作失敗且面臨資源爭用時(shí),它可能會自旋并且重試操作。

  • ConcurrentQueue是FIFO集合,某些和出入順序無關(guān)的場合,盡量不要用ConcurrentQueue。

 

2)ConcurrentStack:線程安全的后進(jìn)先出 (LIFO) 集合

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式