文章

26

粉丝

0

获赞

0

访问

1.3k

头像
2025 年 5 月第 1 次 408 月考试卷 - 第46题回答
操作系统
发布于2025年12月7日 21:53
阅读数 55

int a=10 ; // 水缸可容10 桶水

int b=1 ;  // 水井每次只能容一个桶取水

int c=3 ;  // 水桶总数为3 个

int m=1;

 

P(b);

取水桶

P(c);

V(b);

 

P(m);

P(b);

从水井中取水

V(b);

V(m);

 

P(m);

把桶中的水倒入缸中

V(a);

V(m);

 

放回水桶

V(c);


评分及理由

(1)得分及理由(满分8分)

该学生作答存在严重问题,无法给予分数。理由如下:

  1. 未使用正确的信号量机制:题目要求使用信号量和P/V操作,但学生仅使用了几个整型变量(a, b, c, m)来模拟,没有声明为信号量,也没有体现信号量的初始化和P/V操作的原子性。
  2. 逻辑结构混乱且不完整
    • 没有区分“小和尚”和“老和尚”两个不同的进程或线程。
    • 给出的代码片段是一个混乱的顺序流程,没有循环结构,无法描述持续的取水、倒水、喝水行为。
    • 对关键互斥和同步关系的处理错误。例如,用变量`b`(初始为1)既想表示水井的互斥,又想表示水桶的互斥,逻辑混淆。`P(b); 取水桶; P(c); V(b);` 这段操作顺序和目的不明,且`P(c)`在`V(b)`之前,若`c`为0会阻塞,但此时`b`已被占用,可能导致死锁或无法正确模拟“水桶总数3个”这一资源限制。
    • 对水缸容量的同步处理错误。用`V(a)`表示倒水后增加缸中水量,但缺少对应的`P(a)`操作来检查水缸是否有空位,也没有类似`vat_full`的信号量来供老和尚取水。`V(a)`操作放在互斥锁`m`内,但`a`只是一个普通变量,无法实现“水缸满时小和尚等待”的同步。
    • 完全没有实现“老和尚从缸中取水喝水”的过程。
  3. 未满足题目基本要求:题目要求“给出有关从缸取水、入水的算法描述”,学生答案只给出了一个不完整的、逻辑错误的入水片段,且没有取水算法。因此,从完整性、正确性、以及对并发核心问题(互斥、同步)的处理上看,该答案得0分。

本题满分8分,根据上述严重...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发