C# 多线程 06- 使用并发集合 00- 简介
🏷️ 《C# 多线程》
简介
.NET framework 4 引入了 System.Collections.Concurrent
命名空间,其中包含了一些数据结构。这些数据结构具备可伸缩性,尽可能地避免锁,同时还能提供线程安全的访问。
1. ConcurrentQueue
该集合使用了 原子的比较和交换(Copmare and Swap,简称 CAS)操作,以及 SpinWait 来保证线程安全。
它实现了一个 先进先出(First In First Out,简称 FIFO)的集合
调用
Enqueue
方法向队列中加入元素TryDequeue
方法试图取出队列中的第一个元素TryPeek
方法试图得到第一个元素但并不从队列中删除该元素
2. ConcurrentStack
该类的实现没有使用任何锁,只采用了 CAS 操作
它是一个 后进先出(Last In First Out,简称 LIFO)的集合
使用
Push
和PushRange
方法添加元素使用
TryPop
和TryPopRange
方法获取元素使用
TryPeek
方法检查元素
3. ConcurrentBag
一个支持重复元素的无序集合
使用
Add
方法添加元素使用
TryPeek
方法检查元素使用
TryTake
方法获取元素
4. ConcurrentDictionary
一个线程安全的字典集合的实现
读操作无需使用锁,写操作需要锁
使用多个锁
使用
concurrencyLevel
可以在构造函数中定义锁的数量
5. BlockingCollection
是对
IProducerConsumerCollection
泛型接口的实现的一个高级封装它有很多先进的功能来实现管道场景
支持如下功能:
分块
调整内部集合容量
取消集合操作
从多个块集合中获取元素