- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不是 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/
我正在尝试使用 Java 中的 Future 来解决哲学家问题。 public class Philo implements Callable { private PhiloStatus s
这是我对哲学家晚餐并发问题的实现。我只为两个线程工作,其余线程遭受饥饿,从字面上看 ;) 如果您能找到原因,我将不胜感激。 这是输出: Philosopher 2 is eating Philosop
来自操作系统概念 5.8.2 Dining-Philosophers Solution Using Monitors Next, we illustrate monitor concepts by p
为了熟悉 Haskell 中的 STM,我编写了以下哲学家就餐问题的解决方案: import Control.Concurrent import Control.Concurrent.STM impo
我正在尝试使用资源层次结构解决方案在 C 语言中实现 Dining Philosophers。当我使用 valgrind 时,一切正常。不幸的是,当我使用控制台完成此操作时,我得到了随机的 seqfa
我不是 C# 的初学者,但我确实需要增加我的理解,所以我选择了一个经典的死锁问题来编写代码,以帮助自学一些更高级的 C# 概念。 Dining Philosophers Problem看起来不错,但我
我正在尝试解决哲学家用餐问题。所以我几乎编写了整个代码,但问题是我无法初始化监视器(我制作了我用 C++ 重写的伪代码)所以我真的不能测试程序。谁能帮我说说 monitor/mutex_init 的初
我正在尝试用C语言实现哲学家就餐问题,使用的是p线程、互斥锁和条件变量。。我对输出有几个问题:。下面是我的代码:。以下是使用10秒的输出:。如果有任何帮助,我将不胜感激。谢谢!
我是一名优秀的程序员,十分优秀!