C# 多线程 安全数据结构

news/2025/1/23 4:24:36/

多线程技术 在如今 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.ppmy.cn/news/1565389.html

相关文章

.Net 学习指南与资料分享

.NET学习资料 .NET学习资料 .NET学习资料 在当今数字化时代,软件开发领域蓬勃发展,.NET 作为微软推出的强大开发平台,凭借其出色的性能、跨平台特性以及丰富的生态系统,在企业级应用、Web 应用、移动应用等众多领域都有着广泛的…

基于Spring Boot的车间调度管理系统

基于 Spring Boot 的车间调度管理系统 一、系统概述 基于 Spring Boot 的车间调度管理系统是一个为制造企业车间生产活动提供智能化调度和管理解决方案的软件系统。它利用 Spring Boot 框架的便捷性和高效性,整合车间内的人员、设备、物料、任务等资源&#xff0c…

【JavaEE】Spring(1)

一、什么是Spring和SpringBoot Spring是Java应用程序的开发框架,其目的就是为了简化Java开发;SpringBoot是在spring框架的基础上构建的一个快速开发框架,其作用是进一步简化Spring程序开发 二、SpringBoot项目 2.1 创建项目 1. 设置jdk版本…

AG32 FPGA 的 Block RAM 资源:M9K 使用

1. 概述 AG32 FPGA 包含了 4 个 M9K 块,每个 M9K 块的容量为 8192 bits,总计为 4 个 M9K(4K bytes)。这使得 AG32 的内部存储非常适合嵌入式应用,能够有效地利用片上资源。 M9K 参数 参考自《AGRV2K_Rev2.0.pdf》。…

Java设计模式 十一 外观模式 (Facade Pattern)

外观模式 (Facade Pattern) 外观模式是一种结构型设计模式,其核心思想是为子系统中的一组接口提供一个统一的高层接口,使得子系统的使用更加简单。外观模式通过创建一个外观类(Facade),将复杂的子系统接口封装起来&am…

优雅解决webview_flutter不支持安卓选择图片视频文件问题

这个问题,网上一搜索,就是要去修改别人写好的插件。 搞Flutter开发,尽量不要去修改别人的插件 ,特别是像 webview_flutter 这种比较大的官方插件。 相信我,你拿捏不了它。 主要问题就是: webview_flutter…

Golang Gin系列-5:数据模型和数据库

在这篇Gin教程的博客中,我们将探索如何将模型和数据库与Gin框架无缝集成,使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践,你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…

前端【7】javascript-dom操作

目录 DOM 加载与脚本执行的时序问题 1. 将 <script> 标签放到 HTML 末尾 2.使用 defer 属性 3. 使用 window.onload 一、获取元素 1、getElementById 2、getElementsByClassName 3、getElementsByTagName 4、querySelector和querySelectorALL 5、对象的属性关…