首页 / 知识

关于c#:如何开始对”进餐哲学家”模拟进行编码?

2023-04-14 10:35:00

关于c#:如何开始对”进餐哲学家”模拟进行编码?

How to start coding the “Dining Philosophers” simulation?

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


我认为最好的模拟方法是Fork类,该类具有类似use()的方法来保存分叉(bool available = false)和release()来释放它。

一个带有getFork(Fork)releaseFork(Fork)Philosopher类,用于操作对象Fork的保持/释放(在我看来,计时器在方法useFork()中会很好,因此您可以真正理解死锁。铅>

最后,一个DinningTable(或任何其他名称)类创建实例,并进行日志记录。如果计划使用线程,则应在此处为同时为Fork的每个Philosopher实现一个线程。

作为建议,您可以实现一个Plate类,其中包含Philosopher.useFork()方法在该时间范围内降低的数量的意大利面。这样,您可以看到哪个Philosopher首先完成。

当然,我会为您提供实现,因为您的目标是学习C#...根据我的经验,您最好学习做类似这些类的具体操作;)此外,如果在Google上可以找到很多实现,你想作弊...

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

希望这对您有帮助。


编码模拟死锁学习

最新内容

相关内容

猜你喜欢