1

我目前正在尝试实现餐饮哲学家问题,但是我遇到了一个问题。我这样声明我的叉子

public static fixed Monitor forks[5];

但是,当我尝试通过

forks[i].Enter();

我只获得了“Equals、GetType、ToString、GetHashCode”的可能性。

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

4

2 回答 2

4

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

所以:

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

然后你可以使用:

Monitor.Enter(forks[x]);

获取索引的监视器x

于 2013-10-18T17:03:51.530 回答
1

在 C# 中,您可以锁定任何对象,方法Monitor是静态的。

所以你的代码应该这样做:

List<object> locks = new List<object>();
for (int i = 0; i < 5; i++) locks.Add(new object());

// ...

Monitor.Enter(locks[0]);
于 2013-10-18T17:03:59.180 回答