文章
309
粉丝
0
获赞
1
访问
156.7k

评分及理由
(1)得分及理由(满分4分)
学生指出“bool key=TRUE;”和“if(key==TRUE)”存在错误,并建议修改为“bool key=False;”和“if(key==false)”。该修改方案核心思想是改变key的初始值及判断条件,试图通过逻辑调整实现互斥。然而,标准答案要求修改的关键在于:①将“if”改为“while”实现轮询等待(否则无法防止多个线程同时进入临界区);②将退出区的“lock=TRUE”改为“lock=FALSE”实现解锁(否则其他线程永远无法进入)。学生的答案未涉及“while”循环和“lock=FALSE”解锁语句的修改,这两处是保证互斥和系统后续运行的关键逻辑。学生仅修改key初值和判断条件,无法解决题目伪代码中“if”单次判断导致两个线程同时进入临界区的问题,也无法纠正退出区错误的上锁逻辑,属于核心逻辑错误。因此,本题得0分。
(2)得分及理由(满分3分)
学生回答“能”,理由是函数调用语句与指令功能一致且能完成值交换。标准答案明确要求回答“否”,核心原因在于swap指令是原子操作,而函数调用newSwap()不是原子的,当多个线程并发执行时,函数内部对共享变量lock的读-改-写操作可能被其他线程打断,导致两个线程同时进入临界区,破坏互斥性。学生未理解原子性在多线程互斥中的根本作用,错误认为功能等价即可替代,未指出并发执行时函数调用无法保证原子交换的关键缺陷,属于对核心概念的严重误解。本题得0分。
题目总分:0+0=0分
登录后发布评论
暂无评论,来抢沙发