文章
397
粉丝
40
获赞
2
访问
88.2k
(1)
第一个错误是 退出区 lock = true; 因为lock是共享变量,false代表可以进入临界区,应该设置为false,否则其他线程会一直无法进入临界区
第二个错误是 进入区的 if(key == true) 应该改为 while(key == true),否则不满足忙则等待,所有进程都能走到临界区,无法实现互斥访问
(2)
不可以,因为newSwap()这个方法不是原子性的,当多个进程并发访问的时候,可能会得到相同的lock = false的值,有可能会同时进入临界区。而swap指令是原子性的指令,不同进程不会同时得到lock
评分及理由
(1)得分及理由(满分4分)
学生准确指出了两处错误:退出区应改为lock = FALSE,进入区应改为while循环。理由正确,与标准答案一致。但学生未按题目要求“不增加语句条数”进行说明(虽然修改本身未增加语句,但未明确提及这一点),不过这不影响核心逻辑的正确性。因此扣0.5分,得3.5分。
(2)得分及理由(满分3分)
学生正确回答“不可以”,并指出原因是newSwap()非原子性,可能导致多个进程同时进入临界区。理由与标准答案一致,但未详细说明并发执行时具体步骤(如指令交错)可能导致的问题。由于核心观点正确且简洁,扣0.5分,得2.5分。
题目总分:3.5+2.5=6分
登录后发布评论
暂无评论,来抢沙发