文章
327
粉丝
40
获赞
2
访问
40.1k
(1)
第一个错误是 退出区 lock = true; 因为lock是共享变量,false代表可以进入临界区,应该设置为false,否则其他线程会一直无法进入临界区
第二个错误是 进入区的 if(key == true) 应该改为 while(key == true),否则不满足忙则等待,所有进程都能走到临界区,无法实现互斥访问
(2)
不可以,因为newSwap()这个方法不是原子性的,当多个进程并发访问的时候,可能会得到相同的lock = false的值,有可能会同时进入临界区。而swap指令是原子性的指令,不同进程不会同时得到lock
评分及理由
(1)得分及理由(满分4分)
学生准确指出了两处错误:退出区的"lock = TRUE"应改为"lock = FALSE",以及进入区的"if (key == TRUE)"应改为"while (key == TRUE)"。理由阐述正确,第一处错误会导致其他线程无法进入临界区,第二处错误会导致无法实现互斥(忙则等待)。修改方案与标准答案完全一致。因此,该部分得满分4分。
(2)得分及理由(满分3分)
学生正确回答了“不可以”,并给出了核心原因:newSwap()方法不是原子性的,而swap指令是原子性的。学生进一步解释了非原子性可能导致多个进程同时得到lock=false的值,从而同时进入临界区。虽然解释比标准答案简略(未具体描述并发执行newSwap()的步骤),但关键点(原子性)已涵盖,理由充分。因此,该部分得满分3分。
题目总分:4+3=7分
登录后发布评论
暂无评论,来抢沙发