日期:2014-05-20  浏览次数:20891 次

用过Queue类的,请进来讨论一下。
代码大致是这样的:
Queue <ITask>  tasks   =   new   Queue <ITask> ();
添加:
tasks.Enqueue(value);
取值:
while   (tasks.Count   >   0)
{
    temp   =   tasks.Dequeue();
。。。
  }
多线程的环境,一个线程取值,多个线程添加。在不加锁的情况下,取值居然会取到null值。
希望用过Queue类的兄弟来聊聊这个类的性能、线程安全方面的情况。


------解决方案--------------------
Queue是数组集合,表示对象的先进先出集合,存储在 Queue 中的对象在一端插入,从另一端移除。Queue 的容量是 Queue 可以保存的元素数。Queue 的默认初始容量为 32。向 Queue 添加元素时,将通过重新分配来根据需要自动增大容量.
等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。默认增长因子为 2.0.
Queue 接受 空引用(在 Visual Basic 中为 Nothing) 作为有效值并且允许重复的元素
------解决方案--------------------
多线程要注意线程间的同步
------解决方案--------------------
你这个是线程同步问题,不是 Queue 泛型类的问题...

Queue 泛型类的公共静态(在 Visual Basic 中为 Shared)成员是线程安全的。但不能保证任何实例成员是线程安全的。

只要不修改该集合,Queue 就可以同时支持多个阅读器。即便如此,从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。若要确保枚举过程中的线程安全,可以在整个枚举过程中锁定集合。若要允许多个线程访问集合以进行读写操作,则必须实现自己的同步。