//线程1 负责 enqueue
                     lock (_queProduction)
                    {
                       _queProduction.Enqueue(dt);
                    }                    //线程2 负责将_queProduction对象截断并赋值给queue,然后重新实例化_queProduction
                    Queue<DataTable> queue = null;
            lock (_queProduction)
                    {
                        queue = _queProduction;
                        _queProduction = new Queue<DataTable>();
                    }描述 :要实现线程2  _queProduction 实例化新对象时,线程1 不 enqueue 
怎么写~~~

解决方案 »

  1.   

    用Monitor吧,或者用api的事件,c#也有封装
      

  2.   

    .NET 4.0为多线程提供了一些安全的泛型,在System.Collections.Concurrent命名空间里。
    其中提供有ConcurrentQueue<T>泛型类,还有BlockingCollection<T>等,应该可以实现你的要求。链接如下:http://msdn.microsoft.com/zh-cn/library/dd997305.aspx
      

  3.   

    既然_queProduction被改变,就不应该直接lock(_queProduction)应该lock另一个专门的锁,object rLockqueProduction=new object();                    //线程1 负责 enqueue
                         lock (rLockqueProduction)
                        {
                           _queProduction.Enqueue(dt);
                        }                    //线程2 负责将_queProduction对象截断并赋值给queue,然后重新实例化_queProduction
                        Queue<DataTable> queue = null;
                    lock (rLockqueProduction)
                        {
                            queue = _queProduction;
                            _queProduction = new Queue<DataTable>();
                        }
    这样就行了,