餐饮哲学家,他们吃多少次?

时间:2017-03-17 03:40:49

标签: c operating-system

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

我尝试过的: 我知道有很多不同类型的实现。但是,我找不到吃它们的次数。根据算法,这指的是什么部分?

1 个答案:

答案 0 :(得分:1)

如您所知,Dining Philosophers问题涉及实现互斥,使用互斥和信号量等潜在工具来实现多线程/进程。

问题始于坐在桌子旁的n哲学家。对于每个哲学家的左右,有一个chopstick。当一个哲学家不再思考并且变得饥饿时,他/她试图一次一个地向左/右捡起两根筷子以便他/她吃。当哲学家完成后,他/她将放下筷子并开始重新思考。

如你所知,这个比喻让哲学家成为线程/过程,并且筷子是他们共享和需要的资源,以便执行某些任务。必须执行此操作,以便deadlock不会发生,即process_one拥有资源r1并请求资源r2,但是,另一个进程process_two拥有r2并请求资源r1。虚空进程将放弃其资源,因此系统处于死锁状态。

您的约束不一定要处理线程/进程如何尝试获取其资源。相反,我建议您在代码中拥有共享资源,例如一个数组,用大小p初始化为哲学家的数量,其中填充整数e,即每个哲学家需要吃的次数。每次线程/进程通过获取其所需资源(筷子)来执行其任务时,将数组递减到与某些哲学家相关的某个索引处。允许这些线程/进程继续,直到数组全为零,结束所有哲学家已经吃掉。也许这就是你要找的东西?