如何开始编写“餐饮哲学家”模拟?

时间:2008-09-06 18:26:18

标签: c# deadlock puzzle

我不是C#的初学者,但我真的需要增加理解力,所以我选择了一个经典的死锁问题来编写代码,以帮助自学一些C#的更高级概念。 Dining Philosophers Problem似乎很好,但我需要一些帮助才能开始。我知道我需要接近“食客”作为对象,但为了模拟吃饭之间的随机延迟,我是否应该在每个用餐者的单独线程中进行线程化?我是否需要某种“主人”来监控所有行动?任何一般的设计概念建议都是受欢迎的,但我想将咕噜声编程作为练习。谢谢!

1 个答案:

答案 0 :(得分:6)

我认为模拟它的最佳方法是使用Fork方法的use()类,其中包含fork(bool available = false)和释放它的release()

PhilosophergetFork(Fork)releaseFork(Fork)操作保持/释放对象Fork(在我看来,计时器在方法useFork()中会很好你真的能感受到僵局。

对于Last,创建实例的DinningTable(或任何其他名称)类,并执行日志。如果您打算使用线程,那么您应该为Philosopher的每个Fork实现一个线程。

作为建议,您可以实施一个Plate类,在时间范围内保留一定数量的Philosopher.useFork()方法较低的意大利面条。通过这种方式,您可以看到哪个Philosopher首先完成。

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

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

希望这可以帮到你。