代码改变世界

生产者,消费者线程

2010-01-10 01:57  c#在路上  阅读(472)  评论(0编辑  收藏  举报
代码

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