文章
389
粉丝
5
获赞
19
访问
27.3k
评分及理由
(1)信号量定义部分(满分3分)
得分:2分
理由:学生定义了三个信号量(cnum_s1、cnum_s2、cnum_s3),与标准答案的mutex_y1、mutex_y2、mutex_z对应,但信号量的命名和注释不够清晰(如“用于相关互斥”),且信号量定义语法有误(如typedef struct cnum_s1 = 1;
应为semaphore cnum_s1=1;
)。由于核心逻辑(三个信号量)正确,但语法和表述不规范,扣1分。
(2)thread1实现部分(满分1分)
得分:1分
理由:thread1中正确使用wait(cnum_s1)和signal(cnum_s1)保护对y的访问(与标准答案mutex_y1对应),逻辑正确,不扣分。
(3)thread2实现部分(满分2分)
得分:0分
理由:thread2中存在严重逻辑错误。代码重复执行w=add(y,z);
两次,且第二次前添加了多余的wait(cnum_s3);
,而标准答案中只需保护y和z的访问(mutex_y2和mutex_z)。此外,信号量操作顺序错误(应先wait(mutex_z)再wait(mutex_y2)),可能引发死锁。整体逻辑混乱,扣2分。
(4)thread3实现部分(满分2分)
得分:2分
理由:thread3中正确使用信号量保护z(cnum_s3对应mutex_z)和y(cnum_s1、cnum_s2对应mutex_y1、mutex_y2)的访问,操作顺序与标准答案一致(先保护z,再同时保护y),逻辑正确,不扣分。
题目总分:2+1+0+2=5分
登录后发布评论
暂无评论,来抢沙发