首页 > 其他分享 >【多线程笔记】多线程处理队列数据

【多线程笔记】多线程处理队列数据

时间:2023-10-08 14:56:21浏览次数:48  
标签:tasks 队列 queues sw 笔记 int result 多线程

using System.Collections.Concurrent;
using System.Diagnostics;
{
    int threadCount = 20;
    List<Task> tasks = new List<Task>();
    ConcurrentQueue<int> queues = new ConcurrentQueue<int>();
    for (int i = 0; i < 1000; i++)
    {
        queues.Enqueue(i);
    }
    int index = 0;
    Stopwatch sw = Stopwatch.StartNew();
    sw.Start();
    for (int i = 0; i < threadCount; i++)
    {
        tasks.Add(Task.Run(() => Process()));
    }
    Task.WaitAll(tasks.ToArray());
    sw.Stop();
    Console.WriteLine($"线程数:{threadCount},耗时:{sw.ElapsedMilliseconds}");
    void Process()
    {
        while (true)
        {
            if (queues.TryDequeue(out int result))
            { 
                Thread.Sleep(20);
                int currentIndex = Interlocked.Increment(ref index);
                Console.WriteLine(  $"currentIndex:{currentIndex},result:{result}");
            }
            else
            {
                break;
            }
        }
    }
}

标签:tasks,队列,queues,sw,笔记,int,result,多线程
From: https://www.cnblogs.com/fanfan-90/p/17749044.html

相关文章

  • Java 队列Queue的一些基本操作与概念!!!!!!!!
    首先Java中的队列(Queue)是一种先进先出的数据结构。其中常见的一些基本操作与方法,包括:1、创建队列对象。例如:ArrayDeque、LinkedList等。2、入队操作。将元素添加到队列的末尾处,使用offer()方法。3、出队操作。从队列的头部移除并返回元素,使用poll()方法。......
  • 《敏捷开发》阅读笔记
    Scrum的本质:无论什么时候启动一个项目,为什么不经常检验一下自己正在做的事情,看看是否朝着正确的方向前进?结果是不是大家真正希望看到的,是否有什么办法改善目前正在做的事情?如何才能做得更好更快?存在哪些潜在的障碍?这就是“检查与调整”的循环,每过一小段时间就停一停手头的工作,检......
  • DEV_C++新建项目及多线程实现
    一、单个C++程序(多线程)//实现txt文件的读入并重写入另外一个txt文件中~#include<fstream>//ifstream#include<iostream>#include<string>//包含getline()#include<string.h>#include<pthread.h>#include<windows.h>//#include<cmath>usin......
  • 电机笔记
    目录步进电机什么是步进电机步进电机距频特性步进电机关键参数步进电机驱动方式驱动例程代码步进电机什么是步进电机步进电机是将电脉冲信号转变为角位移或者线位移的开环控制元步进电机件。通过控制施加在电机线圈上的电脉冲顺序、频率和数量,可以实现对步进电机的转向、速度......
  • 力扣刷题笔记-07 整数反转
    07整数反转狗看了都摇头的年纪,纯爱战士一败涂地。怎么反转temp用来保存个位数res用来保存当前结果123,取模运算,这样就可以获得最后一位。比如对123%10,得到temp=3.判断res是不是溢出(重点)如果没有溢出,res扩大十倍,再加上个位数,就相当于是反转了。res=res*10+temp;返回......
  • 如何正确使用多线程和锁机制来构建可靠的程序
    本文分享自华为云社区《确保并发执行的安全性:探索多线程和锁机制以构建可靠的程序》,作者:LionLong。在当今计算机系统中,多线程编程已成为常见的需求,然而,同时也带来了并发执行的挑战。为了避免数据竞争和其他并发问题,正确使用适当的锁机制是至关重要的。通过阅读本文,读者将了解到......
  • Programming abstractions in C阅读笔记:p166-p175
    《ProgrammingAbstractionsInC》学习第58天,p166-p175总结。一、技术总结1.斐波那契数列(FibonacciSequenc)(1)斐波那契数列来源斐波那契数列来自于《LiberAbaci》一书里兔子繁殖问题,相关资料很多,这里不赘述。(2)关于《LiberAbaci》一书《LiberAbaci》——Liber:abook......
  • go笔记
    1、Go语言中的变量、函数、常量名称的首字母也可以大写,如果首字母大写,则表示它可以被其它的包访问(类似于 Java 中的public);如果首字母小写,则表示它只能在本包中使用(类似于Java中private)。......
  • 研发三维GIS系统笔记/实现wgs84投影-001
    1.工作内容,改造引擎,支持wgs84投影改造原因:目前投影是墨卡托投影(与GoogleMap一致)目前的GIS系统是二维的采用这个坐标系是没有问题的但不支持wgs84瓦片数据以及高程数据,工作中很多数据是wgs84格式的,尤其很多三维GIS都是采用wgs84投影wgs84与mercator从数据上......
  • 【进阶16】Python多线程实战案例
    一、Python实现多线程的几种方式_thread:模块提供了基本的线程和互斥锁支持;更底层的的线程管理实现模块threading:threading模块则通过封装_thread,提供了更加全面的线程使用方法。_thread案例:#*coding:utf-8*#用_thread启动多个线程完成任务import_threadimportthread......