文章
175
粉丝
0
获赞
1
访问
22.2k

评分及理由
(1)得分及理由(满分2分)
得分:2分
理由:学生回答“实现C1的代码是临界区,写操作不能同时进行”,这与标准答案的核心观点一致,即多个进程执行C1(写操作)需要互斥访问缓冲区B,否则会导致数据不一致。因此给满分。
(2)得分及理由(满分3分)
得分:1分
理由:学生定义了信号量mutex用于互斥,并引入变量num来跟踪缓冲区状态,思路部分正确。但存在以下逻辑错误:
1. 题目要求使用wait/signal操作描述同步关系,学生虽然使用了P/V操作,但同步逻辑不完整。题目要求“B为空时才能执行C1,B非空时才能执行C2”,这需要同步信号量(如empty或full)来保证执行顺序。学生的代码仅通过if条件判断num的值,在并发环境下,多个进程可能同时通过if检查,导致违反条件执行(例如,P1和P2可能同时进入临界区,或者P2在B为空时执行C2)。
2. 信号量使用不足。标准答案使用mutex和full两个信号量分别实现互斥和同步,而学生仅使用mutex实现互斥,未使用信号量实现“B空才能写、B非空才能读”的同步约束,因此同步逻辑错误。
扣分:由于同步逻辑存在严重错误,扣2分。
(3)得分及理由(满分3分)
得分:2分
理由:学生使用mutex信号量实现互斥,确保P1和P2执行C3时不会同时访问缓冲区B,这与标准答案一致。但存在以下问题:
1. 题目假设“B初始不为空”,但学生代码中`int num = 0;`初始化为0,与假设矛盾,且if条件`if (num != 0)`在初始状态下可能导致进程无法执行C3,逻辑错误。
2. 虽然使用了互斥信号量,但初始条件设置错误,影响正确性。
扣分:由于初始条件设置错误导致逻辑不严谨,扣1分。
题目总分:2+1+2=5分
登录后发布评论
暂无评论,来抢沙发