文章
281
粉丝
40
获赞
2
访问
24.2k
(1)
有两个错误
第一个错误,if(key == TRUE) swap key,lock;这句话错了,需要判断的不是key,是lock。应该修改为while(key == TRUE) swap key,lock;
第二个错误是lock = TRUE,退出区需要把lock 置为FALSE,让其他进程可以进入。应该修改为 lock = FALSE;
(2)
不可以实现互斥,因为swap指令是原子指令,需要保证原子性,newswap不具备原子性,当多个进程同时访问的时候可能会同时进入临界区
可能会违反忙则等待的条件
评分及理由
(1)得分及理由(满分4分)
学生指出了两个错误:一是进入区的条件判断有误,应将if改为while;二是退出区的赋值有误,应将lock=TRUE改为lock=FALSE。这两个修改与标准答案完全一致,且理由正确。但学生第一处修改的理由中“需要判断的不是key,是lock”表述不准确(标准答案中判断的仍是key),不过修改后的语句正确,因此不扣分。得4分。
(2)得分及理由(满分3分)
学生正确指出不能使用newSwap代替swap指令,理由是其不具备原子性,可能导致多个进程同时进入临界区,并提到可能违反“忙则等待”条件(即互斥条件)。理由与标准答案核心思想一致,但未详细解释并发执行newSwap时非原子操作的具体风险(如读写交叉导致互斥失败)。考虑到答案抓住了关键点(原子性),扣1分(因未充分展开)。得2分。
题目总分:4+2=6分
登录后发布评论
暂无评论,来抢沙发