zoukankan      html  css  js  c++  java
  • C# 同步/并发队列ConcurrentQueue

     如下所示,ConcurrentQueue做到了代码的简化,在并发模型中充当同步对象

    private ConcurrentQueue<string> inQueue = new ConcurrentQueue<string>();
    
    private object lockObject = new object();
    private Queue<string> queue = new Queue<string>();

    MSDN例子(还是并行库强大):

            static void Main(string[] args)
            {
                // Construct a ConcurrentQueue.
                ConcurrentQueue<int> cq = new ConcurrentQueue<int>();
    
                // Populate the queue.
                for (int i = 0; i < 10000; i++) cq.Enqueue(i);
    
                // Peek at the first element.
                int result;
                if (!cq.TryPeek(out result))
                {
                    Console.WriteLine("CQ: TryPeek failed when it should have succeeded");
                }
                else if (result != 0)
                {
                    Console.WriteLine("CQ: Expected TryPeek result of 0, got {0}", result);
                }
    
                int outerSum = 0;
                // An action to consume the ConcurrentQueue.
                Action action = () =>
                {
                    int localSum = 0;
                    int localValue;
                    while (cq.TryDequeue(out localValue)) localSum += localValue;
                    Interlocked.Add(ref outerSum, localSum);
                };
    
                // Start 4 concurrent consuming actions.
                Parallel.Invoke(action, action, action, action);
    
                Console.WriteLine("outerSum = {0}, should be 49995000", outerSum);
            }
  • 相关阅读:
    技术一定要动手做一遍才算自已的
    终于提离职了,感觉如释重负
    自我评定与学习计划
    MYSQL---INSERT...SELECT...
    MYSQL---LIMIT
    SQL---having
    MYSQL---数据定义
    CSS---Block和inline元素对比
    CSS---清除浮动
    T-SQL---分页语句
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3579437.html
Copyright © 2011-2022 走看看