• C#并行编程-并发集合


    System.Collections.Concurrent

    为此,在.NET Framework中提供了System.Collections.Concurrent新的命名空间可以访问用于解决线程安全问题,通过这个命名空间能访问以下为并发做好了准备的集合。

    1.BlockingCollection 与经典的阻塞队列数据结构类似,能够适用于多个任务添加和删除数据,提供阻塞和限界能力。

    2.ConcurrentBag 提供对象的线程安全的无序集合

    3.ConcurrentDictionary  提供可有多个线程同时访问的键值对的线程安全集合

    4.ConcurrentQueue   提供线程安全的先进先出集合

    5.ConcurrentStack   提供线程安全的后进先出集合

    这些集合通过使用比较并交换和内存屏障等技术,避免使用典型的互斥重量级的锁,从而保证线程安全和性能。

    ConcurrentQueue 是完全无锁的,能够支持并发的添加元素,先进先出。下面贴代码,详解见注释

     class Program
        {
            static ConcurrentQueue<int> _queue = new ConcurrentQueue<int>();
            static List<int> list = new List<int>();
            static void Main(string[] args)
            {
                for (int i = 0; i < 1000; i++)
                {
                    //写入
                    _queue.Enqueue(i);
                }
                for (int i = 0; i < 1000; i++)
                {
                    Task.Factory.StartNew(Go);
                }
                Console.ReadLine();
            }
    
    
            public static void Go()
            {
                int o;
                if(_queue.TryDequeue(out o))
                {
                    list.Add(o);
                    Console.WriteLine(list.Count());
                }
    
            }
        }
  • 相关阅读:
    Postman+Newman+jenkins实现API自动化测试
    抓包,反抓包,反反抓包
    使用Magisk+riru实现全局改机
    stat命令的实现-mysate(必做)
    第五章学习笔记
    第四章学习笔记
    2.3.1测试
    缓冲区溢出
    学习笔记6
    电子公文传输系统团队项目——需求规格说明书
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/7505358.html
Copyright © 2020-2023  润新知