问题标签 [dining-philosopher]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
282 浏览

concurrency - 使用信号量 (BACI) 就餐哲学家

我必须通过使用信号量来解决哲学家进餐问题。在我的代码中,每一位哲学家都在拿一根筷子,其余的都在等待。

我的主要功能仍然有一些错误。你能告诉我如何启动筷子[k]吗?我是BACI的初学者。

0 投票
1 回答
1430 浏览

c++ - 使用 condition_variable::notify_all 通知多个线程

我一直在尝试编写餐饮哲学家的代码,以便更好地使用多线程编程。在我的代码中,我有一个condition_variable停止线程,直到创建所有线程。但是,似乎当我调用condition_variable::notify_all通知所有线程都已创建并开始“吃”时,只通知一个线程。例如:

我有一个 Philosophers 类,它有这些成员变量:

而这些成员函数。

每个线程都在等待condition_variable start并且不会继续,直到我调用start_eating(). 问题是当我调用时start.notify_all();,只有一个线程得到通知并继续。但是,当我在等待后更改代码以解锁互斥锁时,一切运行正常(所有线程继续):

我不明白这里发生了什么。为什么我需要解锁互斥锁?

完整代码:

0 投票
2 回答
192 浏览

java - notifyAll() 不唤醒进程

我正在编写一个小的 Java 程序,我需要在其中创建线程(我的代码中的哲学家),而这些哲学家需要在思考、饥饿和进食之间改变状态。我对这个项目并没有那么远,我遇到了下一个问题:

我正在创建 5 个哲学家(线程)。每个人的wait()代码中都有一条指令:

问题是在调用时,进程并没有醒来,它们在执行每个线程notifyAll()的方法后就死掉了。run()

如果有人想知道,我没有使用synchronized,因为我需要同时运行这些方法。

另外,我试图把线程notifyAll()的方法放在里面。run()

谁能告诉我发生了什么以及为什么线程没有继续他们的代码?

0 投票
1 回答
147 浏览

java - Thread.join() 在 Dining Philosophers 实现中无法正常工作

我已经使用 Java 中的 Monitor (Synchronized) 实现了餐饮哲学家问题。

该计划的目标是:

  • 每个哲学家都应该遵循思考、拿筷子、吃饭、放筷子的工作流程(没有比赛条件)。

  • 无死锁

我认为这段代码似乎工作正常,但有些地方不对,因为它永远运行我试图调试它,调试工具停在这一行哲学家[i].t.join(); 但该程序并未终止。

请帮助我确定问题或告诉我如何解决它。感谢您的意见。

MyMonitor 类:

我的哲学家类:

0 投票
0 回答
431 浏览

c - 在 C 中实现管道的餐饮哲学家

必须设计餐饮哲学家计划,同时使用管道上课。在管道消息传递中遇到一些麻烦。到目前为止,这是我的代码:

我很确定问题出在管道上。

试图弄清楚为什么消息传递是通过管道实现发生的。

输出:

我 = 0

我 = 0

pids[i] = 282

pids[i] = 0

我 = 1

我 = 1

pids[i] = 283

pids[i] = 0

我 = 2

我 = 2

pids[i] = 284

pids[i] = 0

我 = 3

我 = 3

pids[i] = 285

pids[i] = 0

我 = 4

我 = 4

pids[i] = 286

pids[i] = 0

0 投票
1 回答
195 浏览

java - 餐饮哲学家java替代解决方案

我在一本书上发现了 Java 中“餐饮哲学家问题”的替代解决方案:

解决方案的文本是:

或者,我们可以用从 e 到 N - 1 的数字标记筷子。每个哲学家都试图先拿起编号较低的筷子。这实质上意味着每个哲学家都先选择左筷子,然后再选择右筷子(假设这是您标记它的方式),除了最后一位相反的哲学家。有了这个解决方案,哲学家就永远不能不拿着较小的筷子就拿着较大的筷子。这阻止了具有循环的能力,因为循环意味着较高的筷子将“指向”较低的筷子。

但对我来说还不清楚。有人可以帮我举个例子吗?

谢谢

- - 编辑 - - -

主类:

0 投票
2 回答
4021 浏览

multithreading - 餐饮哲学家问题中的饥饿

我一直在 wikipedia 上寻找解决哲学家就餐问题的方法。 资源层次解决方案

我了解它的工作原理以及打破循环结构如何防止死锁,但解决方案如何防止饥饿?一个或几个线程不能继续运行,而一些线程无法取得进展吗?

如果不是,是什么阻止了这种情况的发生?

实施:

这是哲学家班

这是分叉类

0 投票
1 回答
38 浏览

c# - 我怎样才能编写一个自适应方法以正确的方式使用我的库?

我有一个库,我的程序中的逻辑存在一个问题。如果你能帮助我——我会说你:“谢谢”。非常感谢。代码 :

公共无效 EnterThinkingState() {

问题是:我的课程 - 是一个图书馆。我如何创建一种自适应方法(接收),用户可以使用它在任何他想要的地方输出信息(记录器、控制台、文件等)。我应该使用虚拟方法吗?或者创建一个界面?或者我如何将它与事件绑定?如果我们谈论典型情况,我知道如何使用事件。感谢您的帮助。而且,再次为我糟糕的英语感到抱歉。

0 投票
0 回答
47 浏览

c# - 如何为我的任务执行添加顺序?

对不起我的英语不好,非常感谢你的帮助。

我有一个开始我的任务的课程:

现在我有一个大问题......我在任务和多线程方面工作得很少......

问题:我需要按将传递给方法(或构造函数)的顺序执行任务,如下所示:

我怎么能这样做?谢谢你的帮助。

更新:我的哲学家班:

我的叉子类:

0 投票
0 回答
403 浏览

c - 哲学家就餐问题的仲裁解决方案

在给定的解决方案中,我实现了仲裁解决方案。我的哲学家随便拿起两根筷子。在锁定这些筷子之前,我使用了服务员锁。我无法解决此解决方案的问题。对于这个解决方案,我仍然陷入僵局。