文章
179
粉丝
0
获赞
0
访问
9.1k

评分及理由
(1)得分及理由(满分4分)
学生答案中指出了两个错误:① 共享变量第一行 "Bool lock = FALSE" 存在错误,应改为 "while (!lock)";② 退出区 "lock = TRUE" 错误,应改为 "lock = FALSE"。
对于第一个错误,学生的修改建议 "while (!lock)" 与标准答案 "while (key == TRUE)" 不一致,但逻辑上等价(因为 key 初始为 TRUE,且通过 swap 与 lock 交换值),思路正确,不扣分。
对于第二个错误,学生正确指出退出区应改为 "lock = FALSE",与标准答案一致。
但学生未明确指出进入区中的 if 语句应改为 while 语句(仅通过 "while (!lock)" 间接涉及),且未完整修正代码。根据标准答案,需要修改两处:① while (key == TRUE) swap key, lock; ② lock = FALSE;。学生只完整修正了第二处,第一处修正不完整,扣2分。
得分:2分
(2)得分及理由(满分3分)
学生正确回答 "不可以",并指出原因是 "swap 是原子操作,而 newSwap() 在多线程运行时能导致公共资源访问时被修改,两个操作也修改访问资源时可能出现错误"。
该理由与标准答案一致,即 newSwap() 不是原子操作,可能导致多个线程同时进入临界区。学生答案清晰正确。
得分:3分
题目总分:2+3=5分
登录后发布评论
暂无评论,来抢沙发