文章
130
粉丝
0
获赞
0
访问
6.1k
1):不是,临界区是访问临界资源的代码。
2):
semaphore empty=1,full=0;
p1{
wait(empty); // 等待缓冲区为空
执行C1(写入数据到B);
signal(full); // 标记缓冲区有数据
}
p2{
wait(full); // 等待缓冲区有数据
执行C2(从B中读出数据);
signal(empty); // 标记缓冲区为空
}
3):
semaphore mutex=1,full=1;
p1{
wait(full); // 等待缓冲区有数据
wait(mutex); // 互斥访问缓冲区
执行C3(修改B中的数据);
signal(mutex); // 释放缓冲区访问权
signal(full); // 保持缓冲区有数据状态(C3不改变B的非空性)
}
p2{
wait(full); // 等待缓冲区有数据
wait(mutex); // 互斥访问缓冲区
执行C3(修改B中的数据);
signal(mutex); // 释放缓冲区访问权
signal(full); // 保持缓冲区有数据状态
}
评分及理由
(1)得分及理由(满分2分)
得分:0分
理由:学生回答“不是”,与标准答案“是”相矛盾。临界区确实是指访问临界资源的代码,而C1操作涉及对共享缓冲区B的写入,需要互斥访问,因此实现C1的代码应被视为临界区。学生未能正确理解临界区的定义和应用场景。
(2)得分及理由(满分3分)
得分:3分
理由:学生的答案与标准答案思路一致,使用了两个信号量empty和full来同步进程P1和P2的操作。wait和signal操作的逻辑正确,确保了缓冲区B在写入和读取时的同步与互斥。虽然信号量命名与标准答案不同(empty对应mutex,full对应full),但功能和作用完全一致,因此不扣分。
(3)得分及理由(满分3分)
得分:2分...
登录后发布评论
暂无评论,来抢沙发