zoukankan      html  css  js  c++  java
  • 生产者,消费者线程

    代码

    using System;
    using System.Threading;
    using System.Collections.Generic;

    namespace TestThreadDemos
    {
        
    /// <summary>
        
    /// 生产者消费者队列
        
    /// </summary>
        public class ProducerConsumerQueue : IDisposable
        {
            
    private Thread worker;
            
    private EventWaitHandle wh;
            
    private Queue<string> workQueue;
            
    private object locker;
            
    public ProducerConsumerQueue()
            {
                wh 
    = new AutoResetEvent(false);
                workQueue 
    = new Queue<string>();
                locker 
    = new object();
                worker 
    = new Thread(Work);
                worker.Start();
            }

            
    private void Work()
            {
                
    while (true)
                {
                    
    string outTask = null;
                    
    lock (locker)
                        
    if (workQueue.Count > 0)
                            outTask 
    = workQueue.Dequeue();
                    
    if (outTask == nullreturn;
                    
    if (outTask != null)
                    {
                        Console.WriteLine(
    "输出的任务" + outTask);
                        Thread.Sleep(
    5000);
                    }
                    
    else
                        wh.WaitOne();
                }
            }

            
    public void Dispose()
            {
                EnWorkQueue(
    null);
                worker.Join();
                wh.Close();
            }

            
    public void EnWorkQueue(string task)
            {
                
    if (workQueue != null)
                {
                    
    lock (locker)
                        workQueue.Enqueue(task);
                    wh.Set();
                }
            }
        }
    }
  • 相关阅读:
    template(name="remote" type="string" string="%msg%")
    legacy 发送和接收格式
    保存退出vi编辑以及CentOS 系统安装配置步骤详解
    Templates 模板:
    [Err] 1449
    select2如何设置默认空值
    select2切换事件如何生效
    Basic Structure 基本结构:
    FineBI与FineReport对比
    geoip设置
  • 原文地址:https://www.cnblogs.com/csharponworking/p/1643381.html
Copyright © 2011-2022 走看看