C# 如何解决两个线程操作两个集合的问题?

C# 如何解决两个线程操作两个集合的问题?,c#,multithreading,c#-4.0,C#,Multithreading,C# 4.0,我有两个类,每个类都有一个私有静态列表,每个类中都有操作列表的方法,其形式如下: public static void Add(int number) { lock (list) { Monitor.Pulse(list); containers.Add(list); Monitor.Wait(list); } } 问题是,如果我有两个线程,Thread1在Class1的Add()方法中,Thread2在Class2的Add()方法中,那么它们将分别到达

我有两个类,每个类都有一个
私有静态列表
,每个类中都有操作列表的方法,其形式如下:

public static void Add(int number)
{
  lock (list)
  {
    Monitor.Pulse(list);

    containers.Add(list);

    Monitor.Wait(list);
  }
}

问题是,如果我有两个线程,Thread1在Class1的Add()方法中,Thread2在Class2的Add()方法中,那么它们将分别到达Wait()方法。但由于它们处于不同的等待队列中,Pulse()方法将不起作用(至少,这是我所怀疑的)。我如何解决这个难题?

如果它们都共享对相同基础列表的相同引用,那么就可以了。如果您试图使用lock关键字,则不需要使用Monitor.wait和Monitor.pulsell,因为编译器在看到锁(…){}时会自动执行此操作。

如果您使用的是.NET 4,则可能需要使用并发集合


您能描述一下您想做什么吗?看起来你可能把事情复杂化了。而且你发布的代码似乎不正确。什么是
容器
?而且参数
容器
没有在任何地方使用。为什么需要
监视器。脉冲
监视器。等待
?为什么
lock
不够?您可以查找System.Collections.Concurrent.BlockingCollectionI编辑了代码,这样就没有更多的容器了。我想使用列表而不是blockingcollection,因为它没有列表。我使用monitor.Pulse()和monitor.Wait()使其同步。使用Pulse()和Wait()时,输出将是Thread1 Thread2 Thread1 Thread2等。我尝试从一个集合中提取并将其放入另一个具有两个线程的集合中。