自学内容网 自学内容网

C# 多线程 安全数据结构

多线程技术 在如今 cpu技术发展的前提下,可以说是高频率使用技术,自然会有相应的一些封装好的 数据结构 在内部满足了 线程安全,以供使用。

  1. ConcurrentQueue 线程安全队列 队列的特点 先进先出 如何保证线程安全的其实就是 用了线程同步的spinwait 混合模式的方案
    如何使用API 就是可以调用Enqueue方法向队列中加入元素。TryDequeue方法试图取出队列中的第一个元素,而 TryPeek方法则试图得到第一个元素但并不从队列中删除该元素
  2. ConcurrentStack 线程堆栈 先进后出 没有锁 只使用 cas 操作
    可以使用Push和PushRange方法添加元素,使用TryPop和TryPopRange方法获取元素,以及使用TryPeek方法检查元素
  3. ConcurrentDictionary 线程字典 读比普通字典性能高 写的话如果一个线程会比普通字典慢 但是 并发多个线程就好了 因为
    ConcurrentDictionary的实现使用了细粒度锁 普通字典是 粗粒度锁
    4.ConcurrentBag是一个支持重复元素的无序集合
    5.BlockingCollection是对IProducerConsumerCollection泛型接口的实现的封装
    上面队列 堆栈 还有ConcurrentBag 都是 继承IProducerConsumerCollection接口的,也就是说BlockingCollection 可以灵活的使用 这些类型

因为实现 IProducerConsumerCollection 的这些集合 其实底层 是链表结构
所以在使用时 判断集合的时候 count操作 复杂度On 所以使用isempty O1

字典的话读取是需要锁操作的所以 也尽量避免Count, IsEmpty, Keys, Values, CopyTo及ToArray 这些操作


原文地址:https://blog.csdn.net/Marzlam/article/details/145207680

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!