在Dijkstra的论文“谦虚程序员”中,他提到自己给一些志愿者解决了一个问题:
“我已经对真正有经验的志愿者进行了一些编程实验,但结果出乎意料,出乎意料。我的志愿者中没有一个人找到明显且最优雅的解决方案。经过仔细分析,结果发现有一个共同的来源:他们的重复概念与相关的受控变量要加强的思想紧密联系在一起,以至于他们在精神上看不见明显的事物。他们的解决方案效率低下,不必要地难以理解,并且花了很长时间才找到它们。”
Dijkstra给志愿者的问题是什么?有什么解决方案?
在Dijkstra的论文“谦虚程序员”中,他提到自己给一些志愿者解决了一个问题:
“我已经对真正有经验的志愿者进行了一些编程实验,但结果出乎意料,出乎意料。我的志愿者中没有一个人找到明显且最优雅的解决方案。经过仔细分析,结果发现有一个共同的来源:他们的重复概念与相关的受控变量要加强的思想紧密联系在一起,以至于他们在精神上看不见明显的事物。他们的解决方案效率低下,不必要地难以理解,并且花了很长时间才找到它们。”
Dijkstra给志愿者的问题是什么?有什么解决方案?
Answers:
提出了“用餐哲学家问题”。
基本上有5位哲学家需要吃饭。(想象一个在每个哲学家面前永无休止的食物的盘子),每个盘子之间是一个叉子(5个盘子,5个叉子,5个哲学家)。
哲学家只有将叉子放在右边和左边都握住才能吃东西。(在任何给定时间只能有两个哲学家进餐)。
可以在有货叉的任何时候将其拿起,如果有货叉则将其放下。每个货叉必须相互独立地捡起。(一次一个)。
当一个哲学家不吃饭时,他们在思考(导致问题的原因是需要改变状态)。
您如何允许他们每个人吃东西和交替思考(以便其他人可以吃东西)而又不会造成僵局(一个哲学家握着一把叉子等待另一把叉子,阻止另一位哲学家吃东西)。
这源于并发系统,是讨论并发时提出的一个典型的大学问题。
我相信已经开发了4或5种“官方”算法来解决该问题,但是在Google上快速搜索“餐厅哲学家问题”将为您带来各种各样的结果。
有关Standford U有关此问题的详细信息,请访问:http : //academicearth.org/lectures/dining-philosopher-problem
维基百科文章位于:http : //en.wikipedia.org/wiki/Dining_philosophers_problem
来自MSDN Magizine的解决方案位于:http : //msdn.microsoft.com/zh-cn/magazine/dd882512.aspx
如果您在第866页的脚注中阅读了该文件的原始版本,则其内容为:“ IFIP Congress 1965的会议记录,213-217。“并发编程控制中的问题的解决方案。”
并发和共享资源问题是“吃饭的哲学家问题”。:-)
希望能有所帮助。