1.两个线程同时进队需要加锁吗?
2.两个线程同时出队需要加锁吗?
3.两个线程同时访问队列,一个出队、一个进队,需要加锁吗?另外,好像.net的队列本身就有一个并发同步机制,我不知道是上面的哪一种?

解决方案 »

  1.   

    要用 Monitor.Enter,Monitor.Exit
      

  2.   

    需要加锁
    用lock就可以了,很简单
      

  3.   

    是需要加锁的,对于多线程之间共享的变量用LOCK就可以了。尤其是这个队列还是你自己实现的。。
      

  4.   

    仔细想了一下,还是应该加锁。
    例如:在一个队列中已经有10个obj.
    在线程1中加了 obj1,此时队列的内容是obj1 + 之前的10个obj.
    同时线程2中也加了个obj2,此时队列的内容是obj2 + 之前的10个obj.
    如果这两个线程同时进行,那么有可能造成obj1或obj2丢失。
      

  5.   

    两个线程操作同一个队列是需要加锁的,简单点的话使用Lock语句就行。
      

  6.   

    volatile 说明下队列永远保证数据是最新的一般来讲你这种情况肯定是需要加锁的,线程内运行速度非常快,不可能象我们想象那样简单:
    这边进队,那边出队,大多数情况出队进程已经将所有数据出队,进队数据还么有来,这样容易造成数据丢失。1 注意线程死锁
    2 注意队列状态更新
      

  7.   

    队列的 SyncRoot 属性用来同步访问的,
    msdn 例子:
    Queue myCollection = new Queue();
      lock(myCollection.SyncRoot) {
      foreach (Object item in myCollection) {
      // Insert your code here.
      }
     }
    几乎所有集合类都有这个属性