2008-09-06 60 views
6

我不是C#的初学者,但我真的需要增加我的理解,所以我选择了一个典型的死锁问题来编写代码来帮助自学一些C#的更高级概念。 Dining Philosophers Problem看起来不错,但我需要一点帮助才能开始。我知道我需要将“食客”作为对象,但为了模拟饮食之间的随机延迟,我应该在单独的线程中看每个用餐者的线程吗?我需要某种“主人”来监控所有的行为吗?任何一般的设计概念建议都是值得欢迎的,但我想做一些练习来做一些咕噜编程。谢谢!如何开始编码“餐饮哲学家”模拟?

+0

嗯......我可能会将“食客”塑造成线程......虽然他们可能是包装线程的对象。 – paxos1977 2008-10-13 21:36:51

回答

6

我认为模拟这将是一个Fork类像use()的方法保存叉(bool available = false)和release()释放它的最好的办法。

一个PhilosophergetFork(Fork)releaseFork(Fork)操作该保持/释放对象叉(在我看来,一个计时器将是很好的方法useFork()这样才能真正感知僵局。

而对于最后一个DinningTable(或其他任何名称)创建情况,并做记录。如果你打算使用线程,这里类是你应该实现每个Philosopher线程赞同为Fork

作为一个建议,你可以实现一个Plate类,在时间范围内持有一定数量的意大利面,即Philosopher.useFork()方法。这样你可以看到哪个Philosopher先完成。当然,因为你的目标是学习C#...在我的经验中,你最好学习像这些类一样做一些具体的事情;)另外,你可以在Google上找到大量的实现如果你想作弊...

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

希望这可以帮助你。