Skip to content

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)的集合

  • 使用 PushPushRange 方法添加元素

  • 使用 TryPopTryPopRange 方法获取元素

  • 使用 TryPeek 方法检查元素

3. ConcurrentBag

  • 一个支持重复元素的无序集合

  • 使用 Add 方法添加元素

  • 使用 TryPeek 方法检查元素

  • 使用 TryTake 方法获取元素

4. ConcurrentDictionary

  • 一个线程安全的字典集合的实现

  • 读操作无需使用锁,写操作需要锁

  • 使用多个锁

  • 使用 concurrencyLevel 可以在构造函数中定义锁的数量

5. BlockingCollection

  • 是对 IProducerConsumerCollection 泛型接口的实现的一个高级封装

  • 它有很多先进的功能来实现管道场景

  • 支持如下功能:

    • 分块

    • 调整内部集合容量

    • 取消集合操作

    • 从多个块集合中获取元素