我不是 C# 的初学者,但我确实需要增加我的理解,所以我选择了一个经典的死锁问题来编写代码,以帮助自己学习一些更高级的 C# 概念。餐饮哲学家问题似乎是一个很好的问题,但我需要一些帮助才能开始。我知道我需要将“食客”作为对象来处理,但是为了模拟进餐之间的随机延迟,我是否应该将每个食客的线程放在单独的线程中?我是否需要某种“主人”来监控所有动作?欢迎任何一般的设计概念建议,但我想将 grunt 编程作为练习。谢谢!
GrizzlyGuru
问问题
4111 次
1 回答
6
我认为模拟它的最佳方法是一个Fork
类,该类具有use()
持有 fork ( bool available = false
) 和release()
释放它的方法。
一个具有and的Philosopher
类,它操作对象 Fork 的持有/释放(在我看来,计时器在方法中会很好,因此您可以真正感知死锁。getFork(Fork)
releaseFork(Fork)
useFork()
而对于 Last 一个DinningTable
(或任何其他名称)创建实例的类,并执行日志。如果您打算使用线程,那么您应该在此处Philosopher
为Fork
.
作为建议,您可以实现一个类,在该时间范围内Plate
持有该方法较低的意大利面条数量。Philosopher.useFork()
这样你就可以看到哪个Philosopher
先完成。
当然,我会让你实现,因为你的目标是学习 C#……根据我的经验,你最好学习做一些具体的事情,比如这些类;)此外,如果你想的话,你可以在 Google 上找到很多实现欺骗 ...
我邀请你分享它之后的代码。这是一个很好的学习参考。
希望这可以帮助你。
于 2008-09-06T19:09:56.613 回答