我不是C#的初学者,但我真的需要增加我的理解,所以我选择了一个典型的死锁问题来编写代码来帮助自学一些C#的更高级概念。 Dining Philosophers Problem看起来不错,但我需要一点帮助才能开始。我知道我需要将“食客”作为对象,但为了模拟饮食之间的随机延迟,我应该在单独的线程中看每个用餐者的线程吗?我需要某种“主人”来监控所有的行为吗?任何一般的设计概念建议都是值得欢迎的,但我想做一些练习来做一些咕噜编程。谢谢!如何开始编码“餐饮哲学家”模拟?
6
A
回答
6
我认为模拟这将是一个Fork
类像use()
的方法保存叉(bool available = false
)和release()
释放它的最好的办法。
一个Philosopher
类getFork(Fork)
和releaseFork(Fork)
操作该保持/释放对象叉(在我看来,一个计时器将是很好的方法useFork()
这样才能真正感知僵局。
而对于最后一个DinningTable
(或其他任何名称)创建情况,并做记录。如果你打算使用线程,这里类是你应该实现每个Philosopher
线程赞同为Fork
。
作为一个建议,你可以实现一个Plate
类,在时间范围内持有一定数量的意大利面,即Philosopher.useFork()
方法。这样你可以看到哪个Philosopher
先完成。当然,因为你的目标是学习C#...在我的经验中,你最好学习像这些类一样做一些具体的事情;)另外,你可以在Google上找到大量的实现如果你想作弊...
我邀请你分享它后面的代码。这是一个很好的学习参考。
希望这可以帮助你。
相关问题
- 1. 餐饮哲学家算法死锁
- 2. erlang和餐饮哲学家的并发
- 3. 餐饮哲学家使用信号灯
- 4. 餐饮哲学家(我的实现)过程不沟通
- 5. Java与餐饮哲学家之间的信号量问题
- 6. 餐饮哲学家 - 最后的线程没有正常终止
- 7. 餐饮哲学家的解决方案陷入僵局
- 8. 餐饮哲学家使用二元信号量
- 9. 我的信号量模块工作不正常(餐饮哲学家)
- 10. 导体解决哲学家晚餐
- 11. 在餐饮哲学家的算法中将信息传递给多个线程
- 12. 哲学家蟒蛇
- 13. 用餐哲学家,用他们吃的次数来实现?
- 14. 哲学家就餐,innodb的,选择用于更新
- 15. 另一个哲学家就餐并发问题
- 16. 哲学家同步算法
- 17. 关于我的熟睡理发师和餐饮哲学家算法的正确性的提示(不是答案)?
- 18. 我如何证明哲学家哲学家是否患有死亡或饥饿的可能性?从哪儿开始?
- 19. 开发团队的开发哲学
- 20. 如何开始学习linux内核编程,编码或阅读?
- 21. 我如何开始学习汇编
- 22. React CSS哲学
- 23. UITableView NSFetchedResultsController哲学
- 24. SVN合并 - 哲学
- 25. 如何开始学习SharePoint
- 26. 如何开始学习Android?
- 27. 如何开始学习hadoop
- 28. 如何编写JavaScript代码餐厅
- 29. 关于商业规则的哲学家问题
- 30. 在java中使用信号量使用哲学家
嗯......我可能会将“食客”塑造成线程......虽然他们可能是包装线程的对象。 – paxos1977 2008-10-13 21:36:51