6

我不是 C# 的初学者,但我确实需要增加我的理解,所以我选择了一个经典的死锁问题来编写代码,以帮助自己学习一些更高级的 C# 概念。餐饮哲学家问题似乎是一个很好的问题,但我需要一些帮助才能开始。我知道我需要将“食客”作为对象来处理,但是为了模拟进餐之间的随机延迟,我是否应该将每个食客的线程放在单独的线程中?我是否需要某种“主人”来监控所有动作?欢迎任何一般的设计概念建议,但我想将 grunt 编程作为练习。谢谢!

4

1 回答 1

6

我认为模拟它的最佳方法是一个Fork类,该类具有use()持有 fork ( bool available = false) 和release()释放它的方法。

一个具有and的Philosopher类,它操作对象 Fork 的持有/释放(在我看来,计时器在方法中会很好,因此您可以真正感知死锁。getFork(Fork)releaseFork(Fork)useFork()

而对于 Last 一个DinningTable(或任何其他名称)创建实例的类,并执行日志。如果您打算使用线程,那么您应该在此处PhilosopherFork.

作为建议,您可以实现一个类,在该时间范围内Plate持有该方法较低的意大利面条数量。Philosopher.useFork()这样你就可以看到哪个Philosopher先完成。

当然,我会让你实现,因为你的目标是学习 C#……根据我的经验,你最好学习做一些具体的事情,比如这些类;)此外,如果你想的话,你可以在 Google 上找到很多实现欺骗 ...

我邀请你分享它之后的代码。这是一个很好的学习参考。

希望这可以帮助你。

于 2008-09-06T19:09:56.613 回答