为什么使用并发集合?

原因主要有以下几点:

  • System.Collections和System.Collections.Generic名称空间中所提供的经典列表、集合和数组都不是线程安全的,若无同步机制,他们不适合于接受并发的指令来添加和删除元素。

  • 在并发代码中使用上述经典集合需要复杂的同步管理,使用起来很不方便。

  • 使用复杂的同步机制会大大降低性能。

  • NET Framework 4所提供的新的集合尽可能地减少需要使用锁的次数。这些新的集合通过使用比较并交换(compare-and-swap,CAS)指令和内存屏障,避免使用互斥的重量级锁。这对性能有保障。

注意:

与经典集合相比,并发集合会有更大的开销,因此在串行代码中使用并发集合无意义,只会增加额外的开销且运行速度比访问经典集合慢。

 

2 并发集合

1)ConcurrentQueue:线程安全的先进先出 (FIFO) 集合

主要方法:

  • Enqueue(T item);将对象添加到集合结尾。

  • TryDequeue(out T result); 尝试移除并返回位于集合开始处的对象,返回值表示操作是否成功。

  • TryPeek(out T result);尝试返回集合开始处的对象,但不将其移除,返回值表示操作是否成功。

说明:

  • ConcurrentQueue是完全无锁的,但当CAS操作失败且面临资源争用时,它可能会自旋并且重试操作。

  • ConcurrentQueue是FIFO集合,某些和出入顺序无关的场合,尽量不要用ConcurrentQueue。

 

2)ConcurrentStack:线程安全的后进先出 (LIFO) 集合

延伸阅读

学习是年轻人改变自己的最好方式-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训学习是年轻人改变自己的最好方式