gpt4 book ai didi

c# - 如何开始编码 "Dining Philosophers"模拟?

转载 作者:太空狗 更新时间:2023-10-29 21:37:21 26 4
gpt4 key购买 nike

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

最佳答案

我认为最好的模拟它的方法是一个 Fork 类,它有一个像 use() 这样的方法来保存 fork (bool available = false) 和一个释放它的 release()

一个 Philosopher 类,带有 getFork(Fork)releaseFork(Fork) 操作对象 Fork 的持有/释放(似乎我在方法 useFork() 中使用计时器会很好,这样您就可以真正感知到死锁。

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

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

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

我邀请你在它之后分享代码。这是一个很好的学习引用。

希望对你有帮助。

关于c# - 如何开始编码 "Dining Philosophers"模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com