2017-03-17 29 views
-3

我必须实现哲学家哲学问题的解决方案,用户将输入哲学家的数量和他们吃多少次。该程序将运行这些信息。有人可以参考正确的地方开始这一点。用餐哲学家,用他们吃的次数来实现?

我已经试过: 我知道,有许多不同类型的这种实现的。但是,我找不到一个能够摄入次数的人。这个算法涉及哪部分?

+2

什么是餐饮哲学家的问题呢? –

+0

如何为自己寻找解决方案而不是寻找他人的解决方案。他们可能会有更加完善的解决方案,但我认为这项工作的重点在于,您要考虑如何去做并使之运作起来。即使编码可能只是复制粘贴马拉松,但这并不是你如何学习解决问题,而仅仅依赖于其他人的(可能是错误的)解决方案,而这些解决方案你不理解。 –

回答

1

如你所知,以期实现相互排斥,使用潜在工具,如互斥和信号量多线程/进程的Dining Philosophers问题的交易。

的问题n哲学家围坐在桌旁开始。对于每个哲学家的左右,有一个chopstick。当一个哲学家不再思考并且变得饥饿时,他/她会尝试每次拿起左/右筷子以便他/她吃东西。当哲学家完成后,他/她会放下筷子,然后开始思考。

这个比喻,如你所知,有哲学家是线程/进程和筷子一些资源在其中分享和需要,以执行一些任务一块的。必须预成形,使得deadlock不能发生即process_one持有资源r1和请求资源r2,但是,另一种方法process_two保持r2和请求资源r1。虚空进程将放弃他们的资源,因此系统处于死锁状态。

你的约束,并不必然怎么处理的线程/进程试图获取他们的资源。相反,我建议你在代码中有一个共享资源,例如一个数组,初始化的大小为p,用于哲学家数量,填充整数e是每个哲学家需要吃的次数。每次线程/进程通过获取其所需资源(筷子)来执行其任务时,都会在与某些哲学家相关的某个索引处将该数组递减。允许这些线程/进程继续下去,直到数组全部为零,得出所有哲学家已经吃掉的结论。也许这是你在找什么?

+0

谢谢,这就是我一直在寻找的! –