我目前正在尝试解决Dining Philosopher问题,但是遇到了一个问题。我这样宣布我的叉子

public static fixed Monitor forks[5];


但是当我尝试通过它们引用它们时

forks[i].Enter();


我只给出了“等于,GetType,ToString,GetHashCode”的可能性。

有谁知道如何创建监视器数组并锁定每个特定的监视器?

最佳答案

您只需要创建一个对象数组-您就不能创建Monitor的实例;这是一个静态类。 (我很惊讶您甚至可以声明该数组-尽管也不清楚为什么您决定使用固定大小的缓冲区。我建议坚持使用安全代码。)

所以:

object[] forks = new object[5];
for (int i = 0; i < forks.Length; i++)
{
    forks[i] = new object();
}


然后,您可以使用:

Monitor.Enter(forks[x]);


获取索引x的监视器。

关于c# - C#中的监视器数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19455156/

10-11 16:35