ConcurrentQueue表示线程安全的先进先出 (FIFO) 集合。

    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());
            }

        }
    }
时间: 2024-08-29 22:03:52

ConcurrentQueue表示线程安全的先进先出 (FIFO) 集合。的相关文章

线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析

1.  HashSet与HashMap的联系与区别? 区别:前者是单列后者是双列,就是hashmap有键有值,hashset只有键: 联系:HashSet的底层就是HashMap,可以参考HashSet的类源码,默认构造方法为: public HashSet(){ map = new HashMap<key,Object> } 就是HashSet只用HashMap的键,而不用他的值,前者的值可以程序员随便指定,反正不用 2.  线程并发库中的集合优路劣之分 HashMap和HashSet如果在

Java中的线程--并发库中的集合

线程中的知识点基本都已经学完了,看看Java5并发库中提供的集合... 一.可堵塞队列 队列包含固定长度的队列和不固定长度的队列 ArrayBlockQueue中只有put()方法和take()方法才具有阻塞功能 1.阻塞队列的功能和效果,代码如下: 1 import java.util.concurrent.ArrayBlockingQueue; 2 import java.util.concurrent.BlockingQueue; 3 4 /** 5 * @className: Block

操作系统之页面置换算法(最佳置换OPT,先进先出FIFO,最近最久未使用LRU)

最近学习操作系统时,实验要求实现常见的三种页面置换算法,博主按照书上要求试着编写,实现了案例,并记录在博客随记中,以便后续自己复习并也给需要的同学分享参考一下!水平有限,若有错,请悄悄告诉博主!博主好立即改正. 最佳置换算法(optimal replacement,OPT)是从内存中选择今后不再访问的页面或者在最长一段时间后才需要访问的页面进行淘汰.如下例子: 1 #include <iostream> 2 #include <stdio.h> 3 #include <std

代码就支持了多线程并发

100行代码就支持了多线程并发,批量写入日志 一,您选择用什么样的日志组件 日志组件,不得不提大名鼎鼎的Log4Net.比较常用的还有 Enterprise Library Logging,ServiceStack Logging.当然您还可以补充,我就只用过这几款. 上边提到的3款日志组件,都要在.config里加代码,特别是Log4Net,还要把SQL写在配置里.我就是仅仅只写个日志,还要配置这么多信息,让人略有不爽. 所以在很长一段时间里,我用下边这个方法写日志:   这个方法足够的简单,

ConsurrentDictionary并发字典知多少?

背景 在上一篇文章你真的了解字典吗?一文中我介绍了Hash Function和字典的工作的基本原理. 有网友在文章底部评论,说我的Remove和Add方法没有考虑线程安全问题. https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?redirectedfrom=MSDN&view=netframework-4.7.2 查阅相关资料后,发现字典.net中Dictionary本身时不支持

C# 各种常用集合类型的线程安全版本

在C#里面我们常用各种集合,数组,List,Dictionary,Stack等,然而这些集合都是非线程安全的,当多线程同时读写这些集合的时候,有可能造成里面的数据混乱,为此微软从Net4.0开始专门提供了另一套线程安全的版本(放在System.Collections.Concurrent命名空间). 都有这些: 当有多个线程并发访问集合时,应使用这些类代替 System.Collections 和 System.Collections.Generic 命名空间中的对应类型.   类 说明 Blo

线程安全之ConcurrentQueue&lt;T&gt;队列

最近在弄一个小项目,大概600w行的数据,要进行数据清洗,因数据量偏大,如果单线程去执行,会造成效率偏低,只能用多线程了,但采用多线程存在线程安全问题,于是查了下资料,发现有ConcurrentQueue<T>该数据结构,完美的解决了我目前问题.   采自msdn上面解释:表示线程安全的先进先出 (FIFO) 集合. 先说说简单的用法吧:(来自msdn) 1.Enqueue(T) 将对象添加到 ConcurrentQueue<T> 的结尾处. 2.TryDequeue(T) 尝试移

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

MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒

这里采用.NET Framework 4.0以上版本中新出现的 ConcurrentQueue<T> 类 MSDN是这样描述的: ConcurrentQueue<T> 类是一个线程安全的先进先出 (FIFO) 集合. ConcurrentQueue<T> 的所有公共且受保护的成员都是线程安全的,可从多个线程同时使用. 共采用两个线程,一个读一个写. ConcurrentQueue<T>的实现方法: (FIFO) 集合: ConcurrentQueue<