考研帮 > 考研问答

2.7 经典进程同步问题

2.7.3 哲学家进餐问题

  该问题描述如下:有五个哲学家,他们的生活方式是交替地进行思考和进餐。哲学家们公用一张圆桌,周围放有五把椅子,每人坐一把。在圆桌上有五个碗和五根筷子,当一个哲学家思考时,他不与其他人交谈,饥饿时便试图取用其左、右最靠近他的筷子,但他可能一根都拿不到。只有在他拿到两根筷子时,方能进餐,进餐完后,放下筷子又继续思考。
  (1)利用信号量机制解决哲学家进餐问题
  用一个信号量表示一根筷子,这五个信号量构成信号量数组,其描述为:
  
  所有信号量被初始化1,第i个哲学家的活动可描述为:
  
  虽然上述解法可保证不会有两个相邻的哲学家同时进餐,但可能引起死锁。假如五个哲学家同时饥饿而拿起各自左边的筷子,使五个信号量chopstick均为0;当他们再试图去拿右边的筷子时,他们都将无限期地等待。对于死锁问题,可采取以下三种解决方法:
  至多只允许四个哲学家同时进餐,以保证至少有一个哲学家可以进餐,最终总会释放出他所用过的两根筷子,从而可使更多的哲学家进餐;
  仅当哲学家的左、右两根筷子均可用时,才允许他拿起筷子进餐;
  规定奇数号哲学家先拿起其左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。按此规定,1,2号哲学家竞争1号筷子,3,4号哲学家竞争3号筷子,即五个哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有某一个哲学家能获得两支筷子而进餐。
  (2)利用AND信号量机制解决哲学家进餐问题
  解决上述死锁问题的第二种方法,本质上是AND同步问题。故用AND信号量机制可获得最简洁的解法。
  

关于"最后阶段,真题的正确打开方式_备考经验_考研帮"15名研友在考研帮APP发表了观点

扫我下载考研帮

考研帮地方站更多

你可能会关心:

来考研帮提升效率

× 关闭