0

我有两个类,每个类都有一个private static List<int> list, 和每个类中的方法来操作列表,它们采用以下形式:

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() 方法将不起作用(至少,这是我怀疑的。)我该如何解决这个难题?

4

2 回答 2

0

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

于 2012-05-14T10:01:26.830 回答
0

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

有关 MSDN 的更多信息

于 2012-05-14T10:01:41.713 回答