C# ConcurrentBag 使用详解

原文链接:https://blog.csdn.net/qq_39847278/article/details/145699524

前言

在多线程编程中,如何安全地共享数据是一个常见的挑战。C# 提供了多种线程安全的集合类型来解决这个问题,其中之一就是 ConcurrentBag<T>。本文将详细介绍 ConcurrentBag<T> 的使用方法、适用场景及其优缺点。

一、 基本信息

1. 核心概念 在多线程编程中,线程安全集合是避免数据竞争和保证高效协作的核心工具。

ConcurrentBag<T> 是 .NET Framework 4.0+ 引入的线程安全集合,属于 System.Collections.Concurrent 命名空间。专为多线程频繁添加/获取元素的场景设计。

它实现了无序的、线程安全的添加和移除操作。与 List<T> 或 Queue<T> 不同,ConcurrentBag<T> 不保证元素的顺序,并且每个线程都可以高效地添加和移除自己的元素。

2. 核心特性

1.线程安全:无需手动加锁,内部通过细粒度锁或无锁技术(如 ThreadLocal)实现高效并发。

2.无序集合:元素没有固定顺序,不保证元素的插入顺序,TryTake 可能返回任意元素,适合不需要顺序的场景。

3.高性能:针对“同一线程既添加又移除元素”的场景做了优化(例如线程本地存储),减少竞争。

 

ConcurrentBag<Guid> lstBag = new ConcurrentBag<Guid>();

创建了一个线程安全的集合 ConcurrentBag<Guid>,用于存储 Guid 类型的元素。

posted @ 2025-09-01 18:15  yinghualeihenmei  阅读(76)  评论(0)    收藏  举报