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

有帮助吗?

解决方案

我认为模拟它的最佳方法是 Fork 具有类似方法的类 use() 拿着叉子(bool available = false)和一个 release() 释放它。

A Philosopher 与 一起上课 getFork(Fork)releaseFork(Fork) 操作 Fork 对象的持有/释放(在我看来,计时器在方法中会很好 useFork() 这样你就可以真正感知到僵局。

最后一个 DinningTable (或任何其他名称)创建实例并执行日志的类。如果您打算使用线程,那么您应该在此处为每个线程实现一个线程 Philosopher 同意 Fork.

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

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

我邀请您分享之后的代码。这是一本很棒的学习参考书。

希望这对您有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top