2020年(408)计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年12月3日 08:13
阅读数 39
semaphore s1 = 0 //最大为1
semaphore s2 = 0 //最大为1
while(1){
wait1(){
D;
s1 -= 1;
C;
signal2(){s2 + = 1;};
}
wait2(){s2 -= 1; E;}signal1(){A;B;s1 += 1};
}
评分及理由
(1)得分及理由(满分7分)
学生作答得分为:0分。
理由:
- 逻辑错误严重:学生的作答未能正确使用信号量机制描述题目要求的同步关系。题目要求操作C必须在A和B完成后执行,操作E必须在C和D完成后执行。学生的代码逻辑混乱,将多个操作(如A、B)与信号量操作混写在一个signal1()函数中,且使用了非标准的伪代码格式(如`s1 -= 1`代替`wait(s1)`,`s1 += 1`代替`signal(s1)`),这不符合题目要求的“使用信号量的wait()、signal()操作(P、V操作)描述”这一基本前提。
- 未正确定义进程/线程:标准解法应为每个操作(A、B、C、D、E)定义一个独立的并发过程(Process),并使用信号量协调它们。学生的作答将所有操作放在一个while循环和两个未明确定义的函数(wait1, wait2)中,没有体现操作的并发执行,完全偏离了同步问题的经典解法。
- 信号量使用错误:学生定义了两个信号量s1和s2,但并未说明其具体含义,且其使用方式(如`s1 -= 1`)无法正确实现“等待”和“唤醒”的语义。代码中`wait1`和`wait2`的执行顺序和依赖关系与题目要求不符,无法保证C等待A和B,以及E等待C和D的正确同步顺序。
- 未说明信号量初值含义:虽然标注了“最大为1”,但未说明初值0的含义,且整个方案无法实现题目要求。
综上所述,该作答未能正确理解题目要求,未使用标准的同步原语,且逻辑无法实现指定的同步关系,因此不能得分。
题目总分:0分
登录后发布评论
暂无评论,来抢沙发