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

本文关键字:两个 集合 问题 操作 线程 何解决 解决 | 更新日期: 2023-09-27 18:34:15

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

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

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

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

有关 MSDN 的详细信息