- 姓名:吕煜华
- 学号:201821121046
- 班级:计算1812
1. 选择哪一个问题
- 哲学家进餐问题
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. 运行结果并解释
给出运行结果截图,并解释结果。