操作系统:哲学家进餐问题
问题描述: 有五个哲学家围坐在一张圆桌旁就餐,,圆桌上有五个碗和五只筷子,他们的生活方式就是交替地进行思考和进餐。平时每个哲学家独立思考问题,饥饿时便试图分别取其左右两侧的筷子,只有两只筷子都拿到后才能进餐;进餐完毕后应立即放下筷子,然后继续思考问题。
问题分析:由问题描述可知,哲学家共享的五只筷子是临界资源,为实现筷子的互斥使用,可为每只筷子设置一个互斥信号量,
初值为1,使用一个信号量数组来表示。为描述方便,对每个哲学家进行编号:0~4;
五只筷子及其对应的信号量编号也是0~4,且与哲学家编号相同的筷子位于该哲学家左侧。
方案一:
每个哲学家都先取其左侧的筷子,成功后再取其右侧的筷子,
取到两只筷子后就进餐;进餐完毕后再一次释放着两只筷子。
semaphore chop[5];
void