当前位置: 首页 > article >正文

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 这些操作


http://www.kler.cn/a/512701.html

相关文章:

  • Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)
  • 京华春梦,守岁这方烟火人间
  • .Net Core微服务入门系列(一)——项目搭建
  • TOSUN同星TsMaster使用入门——3、使用系统变量及c小程序结合panel面板发送报文
  • ubuntu系统文件查找、关键字搜索
  • idea中远程调试中配置的参数说明
  • 【Java-图片存储方案】
  • RM500U-CN模组
  • Vue2+OpenLayers添加缩放、滑块缩放、拾取坐标、鹰眼、全屏控件(提供Gitee源码)
  • 从密码学原理与应用新方向到移动身份认证与实践
  • 【三国游戏——贪心、排序】
  • 国自然面上项目|基于组合机器学习算法的病理性近视眼底多模态影像资料自动化定量分析研究|基金申请·25-01-18
  • 04、Redis从入门到放弃 之 数据持久化RDB和AOF
  • 相机成像及参数原理入门
  • python转转商超书籍信息爬虫
  • B站评论系统的多级存储架构
  • STM32补充——FLASH
  • Qt之文件系统操作和读写
  • 基于海思soc的智能产品开发(视频的后续开发)
  • 什么宠物最好养?
  • PhyCAGE:符合物理规律的图像到 3D 生成
  • 思维的进化:从链式推理到元链式推理的算法探秘
  • go语言两个协程goroutine交替打印1-100
  • 解决用 rm 报bash: /usr/bin/rm: Argument list too long错
  • Javascript 将页面缓存存储到 IndexedDB
  • BH1750使用程序