【发布时间】:2012-05-14 09:57:24
【问题描述】:
我有两个类,每个类都有一个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() 方法将不起作用(至少,这是我怀疑的)。我该如何解决这个难题?
【问题讨论】:
-
您能描述一下您要做什么吗?看来您可能过于复杂了。
-
而且您发布的代码似乎不正确。
containers是什么?并且参数container没有在任何地方使用。 -
为什么需要
Monitor.Pulse和Monitor.Wait?为什么lock不够用? -
你可以寻找 System.Collections.Concurrent.BlockingCollection
-
我编辑了代码,这样就没有更多的容器了。我想使用列表而不是阻塞集合,因为它没有。我使用 monitor.Pulse() 和 monitor.Wait() 以便同步。使用 Pulse() 和 Wait() 输出将是 Thread1 Thread2 Thread1 Thread2 等。我想做的是从一个集合中取出,然后将其放入具有两个线程的另一个集合中。
标签: c# multithreading c#-4.0