首页 > 试题广场 >

在一个圆桌上,放了 8 个盘子,每 2 个盘子中间放了一根筷

[问答题]
在一个圆桌上,放了 8 个盘子,每 2 个盘子中间放了一根筷子;每个盘子前站一个人,如果每人都先用 左手拿起左边的筷子,再去拿右边的筷子,因为他右边的筷子已经被他右边的人用左手拿起了,所以他没有办 法凑齐一双筷子。如果希望每个人都能在某个时刻可以凑齐一双筷子,该怎么做。
这个就是进程死锁,占用资源(左筷子),等待释放(右筷子)。
解决方案:
1.所有人拿起左筷子后,使任意一个人<称为:小A>放下手中左筷子。(进程死锁无限等待释放资源,结束任意进程)

2.<小A>左边的人<小B>拿起右筷子,开始吃饭。(得到资源)

3.此人<小B>吃完,放下所有筷子。(释放资源)

4.<小B>左边的<小C>获得筷子开始吃饭,<小B>右边的<小A>重新申请资源,获得左筷子。

5.<小C>吃完放下所有筷子。左边<小D>得到筷子开始吃饭,右边<小B>重新申请资源,获得左筷子.
……

至此,死锁解除,可以一直循环,不再会存在资源占用+循环等待释放资源。每个人都能吃上饭啦@!!(就是这样吃饭轮上一圈,彼此的口水都吃过了,呕(● ̄(エ) ̄●))
编辑于 2020-04-10 21:45:19 回复(0)
在三维空间中 欧拉公式  V-E+F=2
在二维空间中  欧拉公式  V-E+F=1 (因为只有一个平面 ∴ F=1)

盘子看做 点V=8
2个盘子 之间一根筷子 看做 棱数E
由题目得知需要E=16

先看二维空间
V=8代入公式 V-E+F=1 (F=1)
得出E=8 不满足

所以需要拼三维图形
V=8代入公式  V-E+F=2
E-F=6
需求E=16
所以F=10
拼出10面体  即可得到16筷子

不过这题目真是有病

发表于 2015-04-23 01:00:58 回复(0)

将筷子从中间折断,然后他们都有一双筷子了

发表于 2015-04-01 18:02:50 回复(0)
是把筷子横过来?
一人拿筷子一头。
人-人-人-人-这种样子大家就连起来了。然后就都凑齐一双筷子了。
如过不对请不要嘲笑,个人愚见
发表于 2015-03-31 22:59:22 回复(1)
这和哲学进餐问题挺像,但结果好像不能满足要求
发表于 2015-03-31 22:27:50 回复(1)