我不是C#的初学者,但我真的需要增加理解力,所以我选择了一个经典的死锁问题来编写代码,以帮助自学一些C#的更高级概念。 Dining Philosophers Problem似乎很好,但我需要一些帮助才能开始。我知道我需要接近“食客”作为对象,但为了模拟吃饭之间的随机延迟,我是否应该在每个用餐者的单独线程中进行线程化?我是否需要某种“主人”来监控所有行动?任何一般的设计概念建议都是受欢迎的,但我想将咕噜声编程作为练习。谢谢!
答案 0 :(得分:6)
我认为模拟它的最佳方法是使用Fork
方法的use()
类,其中包含fork(bool available = false
)和释放它的release()
Philosopher
类getFork(Fork)
和releaseFork(Fork)
操作保持/释放对象Fork(在我看来,计时器在方法useFork()
中会很好你真的能感受到僵局。
对于Last,创建实例的DinningTable
(或任何其他名称)类,并执行日志。如果您打算使用线程,那么您应该为Philosopher
的每个Fork
实现一个线程。
作为建议,您可以实施一个Plate
类,在时间范围内保留一定数量的Philosopher.useFork()
方法较低的意大利面条。通过这种方式,您可以看到哪个Philosopher
首先完成。
我邀请您在之后分享代码。这是一个很棒的学习参考。
希望这可以帮到你。