Closed. This question is
off-topic。它当前不接受答案。
想改善这个问题吗?
Update the question,所以它是
on-topic,用于堆栈溢出。
2年前关闭。
我必须实施一个解决哲学家用餐问题的解决方案,在该解决方案中,用户将输入哲学家的人数以及他们吃饭的次数。该程序将使用此信息运行。有人可以从正确的地方开始。
我尝试过的
我知道有很多不同类型的实现。但是,我找不到能消耗他们进食次数的食物。就算法而言,这指的是哪一部分?
如您所知,Dining Philosophers问题涉及使用互斥和信号量等潜在工具针对多个线程/进程实现互斥。
问题始于坐在桌子旁的n
哲学家。在每个哲学家的左边和右边,都有一个chopstick
。当哲学家不再思考并且变得饥饿时,他/她试图一次左右拿起两把筷子以便他/她吃饭。当哲学家做完之后,他/她将放下筷子并开始重新思考。
如您所知,这个隐喻让哲学家是线程/进程,并且筷子共享了他们共享和执行某些任务所需的一些资源。必须对其进行预先设置,以使deadlock
不会发生,即process_one
保留资源r1
并请求资源r2
,但是,另一个进程process_two
保留r2
并请求资源r1
。虚无进程将放弃其资源,因此系统处于死锁状态。
您的约束不一定要处理线程/进程如何尝试获取其资源。相反,我建议您在代码中包含一个共享资源,例如一个数组,用大小为p
的哲学家初始化,并用整数e
填充,该整数为每个哲学家需要吃饭的次数。每当线程/进程通过获取其所需资源(筷子)执行其任务时,将数组递减为某个索引,该索引与某个哲学家相关。允许这些线程/进程继续运行,直到数组全为零为止,这表明所有哲学家都吃光了。也许这就是您想要的?
我是一名优秀的程序员,十分优秀!