文章

261

粉丝

19

获赞

402

访问

86.4k

头像
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分

理由:

  1. 逻辑错误严重:学生的作答未能正确使用信号量机制描述题目要求的同步关系。题目要求操作C必须在A和B完成后执行,操作E必须在C和D完成后执行。学生的代码逻辑混乱,将多个操作(如A、B)与信号量操作混写在一个signal1()函数中,且使用了非标准的伪代码格式(如`s1 -= 1`代替`wait(s1)`,`s1 += 1`代替`signal(s1)`),这不符合题目要求的“使用信号量的wait()、signal()操作(P、V操作)描述”这一基本前提。
  2. 未正确定义进程/线程:标准解法应为每个操作(A、B、C、D、E)定义一个独立的并发过程(Process),并使用信号量协调它们。学生的作答将所有操作放在一个while循环和两个未明确定义的函数(wait1, wait2)中,没有体现操作的并发执行,完全偏离了同步问题的经典解法。
  3. 信号量使用错误:学生定义了两个信号量s1和s2,但并未说明其具体含义,且其使用方式(如`s1 -= 1`)无法正确实现“等待”和“唤醒”的语义。代码中`wait1`和`wait2`的执行顺序和依赖关系与题目要求不符,无法保证C等待A和B,以及E等待C和D的正确同步顺序。
  4. 未说明信号量初值含义:虽然标注了“最大为1”,但未说明初值0的含义,且整个方案无法实现题目要求。

综上所述,该作答未能正确理解题目要求,未使用标准的同步原语,且逻辑无法实现指定的同步关系,因此不能得分。

题目总分:0分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发