internal sealed class SyncQueue<T>
    {
        private readonly Object m_lock = new object();
        private readonly Queue<T> m_queue = new Queue<T>();        public void Enqueue(T item)
        {
            Monitor.Enter(m_lock);
            m_queue.Enqueue(item);
            Monitor.PulseAll(m_lock);
            Monitor.Exit(m_lock);
        }        public T Dequeue()
        {
            Monitor.Enter(m_lock);
            while (m_queue.Count == 0) Monitor.Wait(m_lock);
            T item = m_queue.Dequeue();
            Monitor.Exit(m_lock);
            return item;
        }
    }Queue Thread

解决方案 »

  1.   

    这个SyncQueue从它的本意看,叫BlockingQueue更合适,类似.Net4下的BlockingCollection。Dequeue的时候是会阻塞,并一直等到队列里出现数据。
      

  2.   

    要么试试这个  internal sealed class SyncQueue<T>
        {
            private readonly Object m_lock = new object();
            private readonly Queue<T> m_queue = new Queue<T>();        public void Enqueue(T item)
            {
               lock(m_lock)
    {
                m_queue.Enqueue(item);
               }
            }        public T Dequeue()
            {
               lock(m_lock)
           {
               
                T item = m_queue.Dequeue();
           
                return item;
            }
    }
        }
      

  3.   

    当队列没数据  Dequeue不是一直等有数据吗?  Dequeue一直等的话  Enqueue又怎么可能执行呢  死锁了
      

  4.   

    当队列没数据  Dequeue不是一直等有数据吗?  Dequeue一直等的话  Enqueue又怎么可能执行呢  死锁了