我目前正在尝试实现餐饮哲学家问题,但是我遇到了一个问题。我这样声明我的叉子
public static fixed Monitor forks[5];
但是,当我尝试通过
forks[i].Enter();
我只获得了“Equals、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# 中,您可以锁定任何对象,方法Monitor
是静态的。
所以你的代码应该这样做:
List<object> locks = new List<object>();
for (int i = 0; i < 5; i++) locks.Add(new object());
// ...
Monitor.Enter(locks[0]);