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

关于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上可以找到很多实现,你想作弊...

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

希望这对您有帮助。


推荐阅读

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    Lucene学习之高亮显示

    Lucene学习之高亮显示,索引,字符,在搜索引擎中我们经常会看到这样的情景: 红色部分我们称之为高亮显示,lucene提供了HighLighter模块来实

    miui模拟器电脑版|MIUI模拟器

    miui模拟器电脑版|MIUI模拟器,,1. MIUI模拟器笔记本电脑没有办法刷MIUI系统。MIUI系统是小米为手机研发的,基于安卓系统的手机用系统,笔记本

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    拍拍模拟器电脑版|拍拍猴模拟器

    拍拍模拟器电脑版|拍拍猴模拟器,,1. 拍拍猴模拟器爬猴,5173,淘宝,拍拍,慧聪,易宝,送宝挺多的!我比较信任爬猴的 2. 拍拍拍模拟器游戏ppsspp还是相

    模拟器设置vt|模拟器设置VT

    模拟器设置vt|模拟器设置VT,,模拟器设置vtwin7安卓模拟器vt开启步骤如下:1.开启VT需要进入BOIS进行设置。首先重启电脑,在电脑启动时不停地

    Python之可迭代对象、迭代器、生成器

    Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描述可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可