文章
782
粉丝
21
获赞
1
访问
178.8k

评分及理由
(1)得分及理由(满分4分)
学生第一次识别结果指出“i+(key==TRUE)”错误,应改为“while(lock==TRUE)”。第二次识别结果指出“if(key==TRUE)”错误,应改为“while(Lock==TRUE)”。
标准答案指出两处错误:第一处是进入区的判断条件应为while (key == TRUE);第二处是退出区应为lock = FALSE。
学生的两次识别均只指出了第一处错误,并将条件修改为while(lock==TRUE)。这个修改思路与标准答案不完全一致,但逻辑上也是可行的(即轮询检查lock是否为TRUE,为TRUE则等待)。然而,学生没有指出第二处错误(退出区lock = TRUE应改为lock = FALSE)。由于题目要求找出所有错误语句并改正,且不增加语句条数,学生遗漏了第二处错误,因此不能给满分。
考虑到学生正确指出了第一处错误的核心在于将if改为while以实现轮询,尽管条件变量从key改为了lock,但其互斥逻辑在配合正确的退出区操作下也能实现(虽然与标准答案的轮询key的写法不同)。但因其未改正第二处错误,故扣分。第一问满分4分,扣2分。
得分:2分
(2)得分及理由(满分3分)
学生两次识别结果均回答“不能”,理由均为“函数调用不是原子操作,不具有不可中断性”。
标准答案的核心观点也是“否”,因为swap指令是原子操作,而函数调用无法保证原子性,可能导致多个线程同时进入临界区。
学生的回答准确指出了关键原因,与标准答案一致。
得分:3分
题目总分:2+3=5分
登录后发布评论
暂无评论,来抢沙发