文章

43

粉丝

0

获赞

0

访问

401

头像
2024年(408)计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年12月18日 14:57
阅读数 17

(1)是临界区,因为只有B为空时才能执行C1,那么久需要P1和P2不能同时对B进行操作,否则会造成数据错乱

(2)

semphore B_isNull = 0;//B是否为空,初始为空
semphore B_isOperating = 0;//B是否正在操作

C1(){
  while(1){
     wait(B_isNull);
     wait(B_isOperating);
     //对B执行写操作
     signal(B_isOperating);
  }
}

C2(){
  while(1){
     wait(B_isNull);
     wait(B_isOperating);
     //对B执行读操作
     signal(B_isNull);
     signal(B_isOperating);
  }
}

 


评分及理由

(1)得分及理由(满分2分)

学生回答“是临界区”,并给出了基本正确的理由(P1和P2不能同时对B进行操作,否则会造成数据错乱)。这与标准答案中“需要互斥访问”的核心思想一致。虽然表述不如标准答案详尽(例如未明确提及“共享资源”、“并发编程”等术语),但关键点正确。因此,给满分2分。

(2)得分及理由(满分3分)

学生定义了信号量,并尝试用wait/signal操作描述同步关系,但存在多处逻辑错误:
1. 信号量初值错误:题目要求B初始为空。学生定义的`B_isNull = 0`,其wait操作意味着需要等待“B为空”这个条件成立。但初始时B为空,这个条件本应成立,信号量初值应为1(表示“空”的资源可用)。此处初值设0会导致C1无法执行。
2. 信号量作用混淆:`B_isOperating`意图用于互斥,但初值设为0,这会导致任何进程都无法先获取该信号量,系统死锁。互斥信号量初值应为1。
3. 同步逻辑错误:C2中`wait(B_isNull)`是错误的。C2的执行条件是“B非空”,它应该等待的是“B非空”的信号,而不是“B为空”。此处逻辑颠倒。
4. 缺少关键同步:学生的代码框架未能清晰体现“C1执行后,C2才能执行”这一先后顺序的同步关系。虽然通过信号量操作试图控制,但由于上述错误,逻辑无法成立。
5. 代码结构...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发