操作系统第6次实验报告:使用信号量解决进程互斥访问

  • 姓名:吕煜华
  • 学号:201821121046
  • 班级:计算1812

1. 选择哪一个问题

  • 哲学家进餐问题
有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。 约束条件: (1)只有拿到两只筷子时,哲学家才能吃饭。 (2)如果筷子已被别人拿走,则必须等别人吃完之后才能拿到筷子。 (3)任一哲学家在自己未拿到两只筷子吃完饭前,不会放下手中已经拿到的筷子。

2. 给出伪代码

使用一个信号量表示一只筷子,由这五个信号量构成信号量数组,放在圆桌上的筷子是临界资源,在一段时间内只允许一位哲学家的使用。为了解决死锁,我们采用互斥信号量的方法,仅当哲学家左右两侧的筷子都可用时才让他进餐。每个哲学家的行动可表现为:

semaphore chopstick[5]={1,1,1,1,1};
while(true)
{
    //当哲学家饥饿时,总是先拿左边的筷子,再拿右边的筷子
    wait(chopstick[i]);
    wait(chopstick[(i+1)%5]);
    //就餐
    //当哲学家进餐完成后,总是先放下左边的筷子,再放下右边的筷子
    signal(chopstick[i]);
    signal(chopstick[(i+1)%5]);
}

3. 给出完整代码

给出完整代码,适当添加注释。注意代码的可读性、可维护性。

 

4. 运行结果并解释

给出运行结果截图,并解释结果。

上一篇:x


下一篇:信号量应用(PV操作)——经典PV操作