文章
281
粉丝
40
获赞
2
访问
24.2k
(1)
有两个错误
第一个错误,if(key == TRUE) swap key,lock;这句话错了,需要判断的不是key,是lock。应该修改为while(lock == FALSE) swap key,lock;
第二个错误是lock = TRUE,退出区需要把lock 置为FALSE,让其他进程可以进入。应该修改为 lock = FALSE;
(2)
不可以,因为swap指令是原子指令,需要保证原子性,newswap不具备原子性
可能会违反忙则等待的条件
评分及理由
(1)得分及理由(满分4分)
学生指出有两个错误,并正确识别了第二个错误(退出区应设置 lock = FALSE),得2分。但第一个错误的修改建议(将 if 改为 while 并判断 lock)存在逻辑错误:原代码中 key 初始为 TRUE,通过 swap 与 lock 交换值,正确做法应是循环检查 key 是否为 TRUE(即交换后 lock 的旧值),而非直接判断 lock。学生修改为 while(lock == FALSE) 会错误地允许多个线程同时进入临界区(例如当 lock 为 FALSE 时,线程直接进入,违反互斥)。标准答案要求 while(key == TRUE)。因此,第一个错误修改错误,扣2分。本小题得2分(第二个错误正确,第一个错误部分正确但修改错误)。
(2)得分及理由(满分3分)
学生正确回答“不可以”,并指出原因是 swap 是原子指令而 newSwap 不具备原子性,得2分。但理由中“可能会违反忙则等待的条件”表述不准确(实际问题是违反互斥,而非忙等),扣1分。本小题得2分。
题目总分:2+2=4分
登录后发布评论
暂无评论,来抢沙发