回应模式 - No.67157546


No.67157546 - 技术宅


无标题无名氏No.67157546 返回主串

2025-10-03(五)12:48:18 ID:9cuH0Gx 回应

前两天复习操作系统,其中有一个“哲学家进餐”问题

Tips无名氏No.9999999

2099-01-01 00:00:01 ID: Tips

| ω・´) X岛除默认举报理由外没有自删功能。

无标题无名氏No.67157558

2025-10-03(五)12:50:16 ID: 9cuH0Gx (PO主)

就是这样一个问题:有五个哲学家围坐在一个桌子上,每两个哲学家之间都放着一根筷子。桌子上一共有五个哲学家和五根筷子。
哲学家只会做两件事:思考和进餐。每当哲学家想要进餐的时候,他会拿起自己两边的筷子用于进餐,进餐完毕后再把筷子放回去。

无标题无名氏No.67157567

2025-10-03(五)12:52:19 ID: 9cuH0Gx (PO主)

这是一个非常经典的问题,可能看上去很好解决。试想第一种情况:某个哲学家想要进餐,发现自己左边的筷子已经被坐在自己左边的哲学家拿走。那么这个哲学家不得不等待自己左边的哲学家进餐完毕后放回筷子,这样自己才能拿起左边的筷子然后进餐。这种情况看上去很简单。

无标题无名氏No.67157581

2025-10-03(五)12:56:12 ID: 9cuH0Gx (PO主)

所以这个问题看上去很简单:如果某个哲学家发现自己需要的某一根筷子被其他哲学家使用的的话,那么他只需要等待那个哲学家使用完毕筷子,把筷子放回原位即可。

无标题无名氏No.67157582

2025-10-03(五)12:56:35 ID: 9cuH0Gx (PO主)

但试想第二种情况:五个哲学家在思考途中同时想要进餐,那么他们可能会同时拿起自己左边的筷子。这时,当他们想要拿起自己右边的筷子的时候,发现右边的筷子已经被另一个拿走了。于是基于上面的逻辑,每一个哲学家都会等待自己右边的哲学家把筷子放回。但每一个哲学家都不会放回筷子,因为每一个哲学家都会等待自己右面的人把筷子放回,然后自己进食完毕后再放回筷子。
这种现象有一个专业术语,叫做“死锁”

无标题无名氏No.67157588

2025-10-03(五)12:58:23 ID: 9cuH0Gx (PO主)

所以这个问题会变得很复杂。
这个问题在计算机科学的意义在于,计算机中的每一个程序都可能想要独占某项计算机资源(比如磁盘、打印机等),所以这个调度问题有其实际的意义。
但我想说——

无标题无名氏No.67157592

2025-10-03(五)12:59:52 ID: 9cuH0Gx (PO主)

提出这个问题的人一定不是个中国人,因为哪有中国人在同筷子的时候,用别人用过的筷子啊?
试想,如果你是一个哲学家,你坐在桌子上,会用你左边的人用过的筷子吗?

无标题无名氏No.67157601

2025-10-03(五)13:02:07 ID: 9cuH0Gx (PO主)

提出这个问题的人可能只是知道中国人用筷子吃饭,也知道每次用筷子的时候要同时用两根筷子吃饭。
但他可能对于中国人的习惯还是不了解——因为这也太奇怪了。

无标题无名氏No.67157613

2025-10-03(五)13:03:58 ID: 9cuH0Gx (PO主)

哪怕是西方人,估计也不会接受自己用别人用过的小刀和叉子吧。。

无标题无名氏No.67157619

2025-10-03(五)13:05:47 ID: 9cuH0Gx (PO主)

所以我觉得可以把这个问题的表述优化一下。
有五个鼓手围桌在桌子上,每两个鼓手中间都放着一根鼓棒。
每当他们想敲鼓的时候,他们会从自己的左边拿起一根鼓棒,从自己的右边拿起一根鼓棒,然后练习敲鼓。敲完之后再把鼓棒放回。
至少我觉得共用鼓棒还是可以接受的。