C#中的Queue与ConcurrentQueue:区别与适用场景

news/2025/1/7 19:44:21/文章来源:https://www.cnblogs.com/xm123/p/18655339

在C#中,Queue<T> 和 ConcurrentQueue<T> 是两种不同类型的队列,它们有不同的用途和特性。以下是它们之间的主要区别以及何时使用 ConcurrentQueue<T> 的详细解释。

1.主要区别
 1.线程安全性:

    Queue<T>:不是线程安全的。如果在多线程环境中使用,需要额外的同步机制(如锁)来避免数据竞争和不一致性。
    ConcurrentQueue<T>:是线程安全的。它使用了一种无锁(lock-free)的并发机制,可以在多线程环境中安全地进行入队和出队操作,而不需要额外的同步。
2.性能:

   Queue<T>:单线程环境下性能可能更高,因为它没有额外的同步开销。
   ConcurrentQueue<T>:多线程环境下性能更高,因为它避免了锁争用和上下文切换的开销。然而,在单线程环境中,由于无锁算法的实现复杂度,它可能比 Queue<T> 稍慢。
3.API 差异:

    Queue<T>:提供了基本的入队(Enqueue)、出队(Dequeue)和查看队首元素(Peek)的方法。
    ConcurrentQueue<T>:除了基本的入队和出队方法外,还提供了 TryDequeue、TryPeek 等方法,这些方法会尝试执行操作并返回一个布尔值来表示操作是否成功。


2.使用场景
   Queue<T>:

  • 适用于单线程环境。
  • 当确定不会有多个线程同时访问队列时。
  • 当需要高性能且不需要处理线程安全问题时。

   ConcurrentQueue<T>:

  • 适用于多线程环境。
  • 当需要多个线程同时安全地访问和操作队列时。
  • 当需要避免复杂的锁管理和潜在的死锁问题时。
3.案例:
using System;
using System.Collections.Generic;
class Program
{static void Main(){Queue<int> queue = new Queue<int>();// 单线程环境下操作队列queue.Enqueue(1);queue.Enqueue(2);Console.WriteLine(queue.Dequeue()); // 输出: 1Console.WriteLine(queue.Peek());    // 输出: 2
    }
}
using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;class Program
{static void Main(){ConcurrentQueue<int> concurrentQueue = new ConcurrentQueue<int>();// 多线程环境下操作队列
        Parallel.Invoke(() => { concurrentQueue.Enqueue(1); },() => { concurrentQueue.Enqueue(2); });if (concurrentQueue.TryDequeue(out int result)){Console.WriteLine(result); // 可能输出: 1 或 2,取决于线程调度
        }if (concurrentQueue.TryPeek(out int peekResult)){Console.WriteLine(peekResult); // 输出: 剩下的那个数,可能是 1 或 2
        }}
}

 

原文链接:https://blog.csdn.net/x1234w4321/article/details/144209067

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864968.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习jsp-使用IDEA2024社区版

安装tomcat 先要知道自己有的jdk对应可以运行的tomcat版本 https://tomcat.apache.org/whichversion.htmlServlet SpecJSP SpecEL SpecWebSocket SpecAuthentication Spec (JASPIC)Apache Tomcat VersionLatest Released VersionSupported Java Versions6.1 4.0 6.0 2.2 3.1 11…

学习 - Nginx - 浅谈反向代理正向代理

一张图搞懂反向代理&正向代理反向代理 客户端发送请求 连接到互联网以后,不能直接访问到业务服务器(如Tomcat集群),需要通过Nginx反向代理才能访问,同理Tomcat返回报文数据的时候也不能直接返回给客户端,也需要通过Nginx才可以 正向代理 用户通过代理服务器(网关)访…

2025年简单好用的电脑桌面便签记事本软件

在新的一年,很多打工人希望自己可以更加高效工作,把每件事管理的井井有条,实现升职加薪。 每天使用电脑办公,想要随手记录工作事项、零散琐事,用一款电脑桌面便签或记事本软件是非常方便的。 今天为大家推荐一款2025年简单又好用的电脑桌面便签记事本软件:敬业签! ~ 桌面…

基础知识-虚拟化(Virtualization)技术

(250106) 参考资料 KVM 虚拟化技术 | cnblogs | 惨绿少年@clsn.io 虚拟化介绍 | cnblogs | 休耕 云计算与虚拟化技术发展编年史 | cnblogs | 云物互联 nova系列二:kvm介绍 | cnblogs | linhaifeng 虚拟化与容器 | cnblogs | marility 《LPIC-3-Virtualization-and-Containe…

【k8s基础】k8s 基本使用

介绍及教程大全 Kubernetes中文文档 结构模型 k8s 是经典的一对多模型,有一个主要的管理节点master和许多的工作节点slaver。当然,k8s 也可以配置多个管理节点,拥有两个以上的管理节点被称为 高可用。k8s 包括了许多的组件,每个组件都是单运行在一个docker容器中,然后通过…

Scss 入门

Scss 是对 CSS 的扩展,提供了比 CSS 更简洁的语法和更强大的功能。不过,在部署时,我们要先把 Scss 编译成 CSS,才能让浏览器识别。编译 Scss 的方法有很多,这里我们使用 VS Code 的插件 Live Sass Compiler 进行自动编译。 基本准备配置保存目录。在 VS Code 配置文件中添…

Seed Lab实验:RSAPublic-Key Encryption and Signature Lab

Seed Lab实验:RSAPublic-Key Encryption and Signature Lab笔记RSAPublic-Key Encryption and Signature Lab 1.推导RSA私钥 import gmpy2p = 0xF7E75FDC469067FFDC4E847C51F452DF q = 0xE85CED54AF57E53E092113E62F436F4F e = 0x0D88C3n = q * p phi = (p - 1) * (q - 1) d =…

双稳态触发器

双稳态触发器双稳态触发器是一种具有记忆功能的逻辑单元电路,它能储存一位二进制码。 特点有两个稳定状态“0”态和“1”态; 能根据输入信号将触发器置成“0”或“1”态; 输入信号消失后,被置成的“0”或“1”态能保存下来,即具有记忆功能。RS触发器 基本RS触发器 输入低电…

在Lazarus下的Free Pascal编程教程——以数据处置推动程序运行的模块化程序设计方法

0.前言 我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。 了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”和…

foobar2000 v2.24.1 汉化版

foobar2000 v2.24.1 汉化版 -----------------------【软件截图】---------------------- -----------------------【软件介绍】---------------------- foobar2000 是一个 Windows 平台下的高级音频播放器.包含完全支持 unicode 及支持播放增益的高级标签功能. 特色: * 支持的…

ABB机器人IO板DSQC652维修方法归纳

ABB机械手IO板DSQC652维修需要一定的专业知识和技能,以下是详细的维修步骤和注意事项:1. 初步检查断电操作:在维修前,确保机器人系统完全断电,避免触电或损坏设备。外观检查:检查DSQC652板是否有明显的物理损坏,如烧焦痕迹、裂纹或元件脱落。连接检查:检查IO板与控制器…

车载以太网一致性测试套件TAE.AETP

随着汽车电子电气架构的发展,高带宽、高速率的数据通信需求逐步涌现,具有稳定、高效特点的车载以太网技术逐步成为汽车主干网通信主流方案。为了满足复杂的通信需求,越来越多的以太网通信协议被应用到车载领域与之而来的是更多新技术的测试验证需求,经纬恒润自主研发的车载…