文章
43
粉丝
0
获赞
0
访问
401
(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. 代码结构...
登录后发布评论
暂无评论,来抢沙发