线程安全ConcurrentBag

ConcurrentBag并行,不保证顺序,线程安全

public static void ConcurrentBagWithPallel()
{
    ConcurrentBag<int> list = new ConcurrentBag<int>();
    Parallel.For(0, 10000, item =>
    {
        list.Add(item);
    });
    //能够达到10000
    Console.WriteLine("ConcurrentBag‘s count is {0}", list.Count());
    int n = 0;
    foreach(int i in list)
    {
        if (n > 10)
            break;
        n++;
    //输出结果随机,因为是并行的
        Console.WriteLine("Item[{0}] = {1}",n,i);
    }
    Console.WriteLine("ConcurrentBag‘s max item is {0}", list.Max());
}

结果

时间: 2024-11-09 18:17:21

线程安全ConcurrentBag的相关文章

提高C#质量与性能

这篇随笔,用来记录提高C#质量和性能的方法. 基本 使用字符串应避免两种性能开销. 1.确保尽量少的装箱:值类型转换引用类型,会进行装箱操作.但是值类型的ToString(),是非托管方法,直接操作内存进行转换.故此不会进行装箱操作.9.ToString() 性能高于 string s = 9; 2.避免分配额外的内存空间:因字符串不可变性,对字符串进行任何操作或运算都会创建新对象,需要分配新的内存空间.使用常量进行+ 拼接,不会分配内存空间.尽量使用StringBuilder.string.F

各科基础详实

一. Java基础部分 1. JAVA的基本数据类型有哪些 ?  String 是不是基本数据类型 ? 2. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 3. Java有没有goto? 7 4. 说说&和&&的区别. 7 5. 在JAVA中如何跳出当前的多重嵌套循环? 7 6. switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 8 7. short s1 = 1; s1 = s1 + 1;有什么

【C#进阶系列】29 混合线程同步构造

上一章讲了基元线程同步构造,而其它的线程同步构造都是基于这些基元线程同步构造的,并且一般都合并了用户模式和内核模式构造,我们称之为混合线程同步构造. 在没有线程竞争时,混合线程提供了基于用户模式构造所具备的性能优势,而多个线程竞争一个构造时,混合线程通过基元内核模式的构造来提供不“自旋”的优势. 那么接下来就是个简单的混合线程同步构造的例子,可与上一章最后的那些例子相比较: public class SimpleHybridLock : IDisposable { private Int32 m

.NET 同步与异步 之 线程安全的集合 (十一)

本随笔续接:.NET 同步与异步 之 警惕闭包(十) 无论之前说的锁.原子操作 还是 警惕闭包,都是为安全保驾护航,本篇随笔继续安全方面的主题:线程安全的集合. 先看一下命名空间:System.Collections.Concurrent,常用的类型有(均为泛型):BlockingCollection<T>.ConcurrentBag<T>.ConcurrentDictionary<TKey, TValue>.ConcurrentQueue<T>.Concu

.Net多线程编程—Parallel LINQ、线程池

Parallel LINQ 1 System.Linq.ParallelEnumerable 重要方法概览: 1)public static ParallelQuery<TSource> AsParallel<TSource>(this IEnumerable<TSource> source);启用查询的并行化 2)public static ParallelQuery<TSource> AsOrdered<TSource>(this Paral

多线程下的进程同步(线程同步问题总结篇)

之前写过两篇关于线程同步问题的文章(一,二),这篇中将对相关话题进行总结,本文中也对.NET 4.0中新增的一些同步机制进行了介绍. 首先需要说明的是为什么需要线程功能同步.MSDN中有这样一段话很好的解释了这个问题: 当多个线程可以调用单个对象的属性和方法时,对这些调用进行同步处理是非常重要的.否则,一个线程可能会中断另一个线程正在执行的任务,使该对象处于一种无效状态. 也就说在默认无同步的情况下,任何线程都可以随时访问任何方法或字段,但一次只能有一个线程访问这些对象.另外,MSDN中也给出定

线程 Z

原文:http://www.albahari.com/threading/part5.aspx 专题:C#中的多线程 1并行编程Permalink 在这一部分,我们讨论 Framework 4.0 加入的多线程 API,它们可以充分利用多核处理器. 并行 LINQ(Parallel LINQ)或称为 PLINQ Parallel类 任务并行(task parallelism)构造 SpinLock 和 SpinWait 这些 API 可以统称为 PFX(Parallel Framework,并行

多线程(6)线程同步

使用多线程很容易,但是如果多个线程同时访问一个共享资源时而不加以控制,就会导致数据损坏.所以多线程并发时,必须要考虑线程同步(或称线程安全)的问题. 什么是线程同步 多个线程同时访问共享资源时,使多个线程顺序(串行)访问共享资源的机制. 注意: 1,共享资源,比如全局变量和静态变量. 2,访问,一般指写操作,读操作无需考虑线程同步. 3,串行,指当一个线程正在访问共享资源时,其它线程等待,直到该线程释放锁. 线程同步带来哪些问题 如果能保证多个线程不会同时访问共享资源,那么就不需要考虑线程同步.

List是线程安全的吗?如果不是该怎么办呢?安全的List对性能的影响有多大呢?

测试条件: 开启2个并行执行任务,往同一个list对象写入值 测试代码: static int maxNum = 1000000; static List<int> list = new List<int>(); static void Main(string[] args) { //迭代次数 int iterationNum = 3; CodeTimer.Initialize(); CodeTimer.Time("List是否是线程安全的呢?", iterat