0

private static List<int> listリストを操作するために、各クラスに , および メソッドを持つ 2 つのクラスがあり、次の形式を取ります。

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

    containers.Add(list);

    Monitor.Wait(list);
  }
}

問題は、2 つのスレッドがあり、Thread1 が Class1 の Add() メソッドにあり、Thread2 が Class2 の Add() メソッドにある場合、それぞれが Wait() メソッドに到達することです。しかし、これらは別の待機キューにあるため、Pulse() メソッドは機能しません (少なくとも、私はそれを疑っています)。どうすればこの難問を解決できますか?

4

2 に答える 2

0

両方が同じ基になるリストへの同じ参照を共有している場合は、問題ありません。また、lock キーワードを使用しようとしている場合は、Monitor.wait と Monitor.pulseall を使用する必要はありません。これは、ロック (...) { } が検出されたときにコンパイラが自動的に行うためです。

于 2012-05-14T10:01:26.830 に答える
0

.NET 4 を使用している場合は、同時コレクションを使用することをお勧めします。

MSDN の詳細情報

于 2012-05-14T10:01:41.713 に答える